⌘+k ctrl+k
1.3 (稳定版)
搜索快捷键 cmd + k | ctrl + k
连接操作

如何强制连接顺序

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

关闭连接顺序优化器

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

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;