Lakehouse 执行计划分析指南(EXPLAIN)

概述

在 SQL 查询性能优化中,理解查询的执行计划是第一步。云器 Lakehouse 提供

EXPLAIN
EXPLAIN
命令,展示查询的逻辑和物理执行计划,帮助你识别全表扫描、低效 JOIN 和未命中索引等问题。本指南按业务场景分类,帮助你快速掌握执行计划的查看与分析方法。

涉及的 SQL 命令

命令用途适用场景
EXPLAIN SELECT ...
EXPLAIN SELECT ...
查看逻辑执行计划快速检查查询结构

前置准备

以下示例使用模拟的订单表

orders_explain
orders_explain

-- 创建测试表 CREATE TABLE IF NOT EXISTS orders_explain ( order_id INT, customer_id INT, amount DOUBLE, order_date DATE ); -- 插入测试数据 INSERT INTO orders_explain VALUES (1, 101, 500, '2024-06-01'), (2, 102, 300, '2024-06-02'), (3, 101, 800, '2024-06-03');


查看执行计划

使用

EXPLAIN
EXPLAIN
查看查询的执行计划,了解查询将被如何分解和执行。

-- 查看查询的执行计划 EXPLAIN SELECT order_id, amount FROM orders_explain WHERE customer_id = 101;

输出说明

  • PhysicalTableScan
    PhysicalTableScan
    :表扫描,读取底层数据。
  • Filter
    Filter
    :行过滤,应用
    WHERE
    WHERE
    条件。
  • Project
    Project
    :列裁剪,只读取需要的列。

识别全表扫描

当查询未使用分区列或索引过滤时,执行计划会显示全表扫描(

TableScan
TableScan
无过滤条件)。

-- 未使用分区列的查询(可能触发全表扫描) EXPLAIN SELECT * FROM orders_explain WHERE amount > 400;

优化建议

  • 如果
    order_date
    order_date
    是分区列,在
    WHERE
    WHERE
    中加入
    order_date >= '2024-06-01'
    order_date >= '2024-06-01'
    可触发分区裁剪。
  • amount
    amount
    列创建 Bloom Filter 索引可加速等值或范围过滤。

验证索引命中

创建索引后,使用

EXPLAIN
EXPLAIN
确认查询是否自动使用了索引。

-- 在 customer_id 创建布隆过滤器索引 CREATE BLOOMFILTER INDEX idx_customer_bloom ON TABLE orders_explain(customer_id); -- 查看执行计划(应显示索引过滤) EXPLAIN SELECT * FROM orders_explain WHERE customer_id = 101;

输出变化

  • 优化后的计划中,
    TableScan
    TableScan
    会附带
    BloomFilter
    BloomFilter
    IndexScan
    IndexScan
    标记,表示跳过了不匹配的数据块。

对比优化前后计划

在优化查询(如添加索引、调整 JOIN 顺序)后,对比执行计划的变化。

-- 优化前:全表扫描 EXPLAIN SELECT * FROM orders_explain WHERE customer_id = 101; -- 优化后:索引扫描 -- (创建索引后再次执行 EXPLAIN,对比输出差异)

评估指标

  • TableScan
    TableScan
    是否变为
    IndexScan
    IndexScan
    或附带过滤条件。
  • Cost
    Cost
    估算是否显著下降。
  • Statistics
    Statistics
    预估扫描行数是否减少。

清理测试数据

完成执行计划验证后,建议清理测试表:

-- 删除测试表 DROP TABLE IF EXISTS orders_explain;


注意事项

  1. EXPLAIN 不执行查询
    EXPLAIN
    EXPLAIN
    仅生成执行计划,不会实际读取数据或修改表。
  2. 动态计划:执行计划由优化器根据当前统计信息生成,表数据变化后计划可能不同。
  3. EXTENDED 输出量大:复杂查询的
    EXPLAIN EXTENDED
    EXPLAIN EXTENDED
    输出可能长达数百行,建议结合关键词搜索(如
    Join
    Join
    ,
    Scan
    Scan
    ,
    Filter
    Filter
    )。
  4. JSON 格式:使用
    EXPLAIN (FORMAT JSON)
    EXPLAIN (FORMAT JSON)
    可将计划输出为 JSON,便于程序化解析或可视化工具集成。

相关文档

联系我们
预约咨询
微信咨询
电话咨询