注册
达梦 SQL 执行计划与操作符学习
专栏/技术分享/ 文章详情 /

达梦 SQL 执行计划与操作符学习

济楚 2026/07/17 221 0 0
摘要

一、执行计划基础
执行计划:SQL 语句在数据库中的执行过程或访问路径。
计划节点:执行计划中的每一行。节点内容一般由操作符、代价三元组、补充信息组成。
代价三元组:[代价,记录行数,字节数]。
执行顺序:缩进越深越先执行;同样缩进时,上面的先执行。口诀:最右最上先执行。
查看方式:DM 管理工具中选中 SQL 后点击执行计划按钮,或使用 F9;也可以在 SQL 前加 EXPLAIN。
EXPLAIN SELECT * FROM SYSOBJECTS;
真实执行信息:disql 中可使用 autotrace 查看真实执行计划和统计信息。
set autotrace traceonly;
select * from sysobjects;
重点指标:logical reads、physical reads、rows processed。
二、数据访问类操作符
CSCN:全表扫描。CSCN2 是 CLUSTER INDEX SCAN 的缩写,即通过聚集索引扫描全表。没有选择谓词,或没有可利用索引时,一般只能做全表扫描。
SSEK:二级索引扫描。先扫描索引,再通过主键、聚集索引、rowid 等信息去扫描表。
CSEK:聚集索引扫描。只需要扫描索引,不需要扫描表,也不需要 BLKUP。
SSCN:索引全扫描。不需要扫描表。
BLKUP:二次扫描,也叫回表。先使用二级索引定位 rowid,再根据主键、聚集索引、rowid 等信息获取数据行中的其他列。
SLCT:选择运算,用于查询条件过滤。可比较返回结果集与代价估算是否接近;相差较大时可考虑收集统计信息;过滤条件过滤性较好时可考虑在条件列增加索引。
三、结果处理类操作符
NSET:结果集收集。一般是查询计划的顶层节点。
PRJT:投影运算,用于选择表达式项的计算,广泛用于查询、排序、函数索引创建等。
四、聚集类操作符
AAGR:简单聚集。用于没有 GROUP BY 的聚集函数计算,例如 COUNT、SUM、AVG、MAX、MIN。
FAGR:快速聚集。用于没有过滤条件时,从表或索引快速获取 MAX、MIN、COUNT 值。
HAGR:HASH 分组聚集。用于分组列没有索引、只能走全表扫描的分组聚集。
SAGR:流分组聚集。用于分组列有序的情况。
五、连接类操作符
NEST LOOP:嵌套循环连接。将驱动表的每一个值与被驱动表的所有值拼接,形成大结果集,再筛选满足条件的行。驱动表行数就是循环次数,会影响执行效率。适用场景:驱动表有较好过滤条件、表连接条件能使用索引、结果集较小。
HASH JOIN:哈希连接。没有索引或索引无法使用时,大多数连接会采用这种方式。使用关联列去重后结果集较小的表做 HASH 表,另一张表的连接列经过 HASH 后向 HASH 表匹配。主要开销在全表扫描和 HASH 运算,并且比较消耗内存。
MERGE JOIN:归并排序连接。需要两张表的连接列都有索引;对两张表扫描索引后,按照索引顺序进行归并。
六、阅读顺序
先看底层数据访问路径:CSCN、SSEK、CSEK、SSCN、BLKUP。
再看条件过滤:SLCT。
再看聚集处理:AAGR、FAGR、HAGR、SAGR。
最后看表连接方式:NEST LOOP、HASH JOIN、MERGE JOIN。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服