⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
EXPLAIN: 检查查询计划
EXPLAIN SELECT * FROM tbl;

EXPLAIN 语句用于显示物理计划,即即将执行的查询计划。通过在查询语句前加上 EXPLAIN 即可启用。物理计划是一个由运算符组成的树状结构,这些运算符按特定顺序执行以生成查询结果。为了生成高效的物理计划,查询优化器会将现有的物理计划转换为更优的物理计划。

请参考以下示例进行演示:

CREATE TABLE students (name VARCHAR, sid INTEGER);
CREATE TABLE exams (eid INTEGER, subject VARCHAR, sid INTEGER);
INSERT INTO students VALUES ('Mark', 1), ('Joe', 2), ('Matthew', 3);
INSERT INTO exams VALUES (10, 'Physics', 1), (20, 'Chemistry', 2), (30, 'Literature', 3);

EXPLAIN ANALYZE
    SELECT name
    FROM students
    JOIN exams USING (sid)
    WHERE name LIKE 'Ma%';
┌─────────────────────────────┐
│┌───────────────────────────┐│
││       Physical Plan       ││
│└───────────────────────────┘│
└─────────────────────────────┘
┌───────────────────────────┐
│         PROJECTION        │
│   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │
│            name           │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│         HASH_JOIN         │
│   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │
│           INNER           │
│         sid = sid         ├──────────────┐
│   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │              │
│           EC: 1           │              │
└─────────────┬─────────────┘              │
┌─────────────┴─────────────┐┌─────────────┴─────────────┐
│         SEQ_SCAN          ││           FILTER          │
│   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   ││   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │
│           exams           ││     prefix(name, 'Ma')    │
│   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   ││   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │
│            sid            ││           EC: 1           │
│   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   ││                           │
│           EC: 3           ││                           │
└───────────────────────────┘└─────────────┬─────────────┘
                             ┌─────────────┴─────────────┐
                             │         SEQ_SCAN          │
                             │   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │
                             │          students         │
                             │   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │
                             │            sid            │
                             │            name           │
                             │   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │
                             │ Filters: name>=Ma AND name│
                             │  <Mb AND name IS NOT NULL │
                             │   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │
                             │           EC: 1           │
                             └───────────────────────────┘

请注意,查询实际上并不会被执行——因此,我们只能看到每个运算符的估计基数(EC),该数值是通过使用基础表的统计信息并对每个运算符应用启发式方法计算得出的。

其他 Explain 设置

EXPLAIN 语句支持其他可用于控制输出的设置。可以使用以下设置:

默认设置。仅显示物理计划。

PRAGMA explain_output = 'physical_only';

仅显示优化后的计划。

PRAGMA explain_output = 'optimized_only';

同时显示物理计划和优化后的计划。

PRAGMA explain_output = 'all';

另请参阅

有关更多信息,请参阅“性能分析 (Profiling)”页面

© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南