⌘+k ctrl+k
1.1.3 (stable)
Search Shortcut cmd + k | ctrl + k
Join Operations

如何强制连接顺序

DuckDB 有一个基于成本的查询优化器,它使用基础表中的统计信息(存储在 DuckDB 数据库或 Parquet 文件中)来估计操作的基数。

关闭连接顺序优化器

要关闭连接顺序优化器,请设置以下 PRAGMAs

SET disabled_optimizers = 'join_order,build_side_probe_side';

这将禁用连接顺序优化器和连接的左/右交换。 这样,DuckDB 将按照 JOIN 子句的顺序构建左深连接树。

SELECT 
FROM 
JOIN  -- this join is performed first
JOIN  -- this join is performed second

一旦执行了相关的查询,使用以下命令将优化器调回:

SET disabled_optimizers = '';

创建临时表

为了强制特定的连接顺序,您可以将查询分解为多个查询,每个查询创建一个临时表:

CREATE OR REPLACE TEMPORARY TABLE t1 AS
    ;

-- join on the result of the first query, t1
CREATE OR REPLACE TEMPORARY TABLE t2 AS
    SELECT * FROM t1 ;

-- compute the final result using t2
SELECT * FROM t1 

要清理,删除临时表:

DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t2;