⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 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;
© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南