执行筹划中的操纵 ID 标识了各操纵的执行次序,通常是从缩进少的节点开始,渐渐向缩进多的节点推进。数字越小,执行优先级越高。通过观察执行次序,我们可以相识数据的活动方向,以及哪些操纵是底子,哪些是后续基于前面效果的进一步处理。例如,先举行表的访问操纵获取原始数据,然后大概举行过滤、毗连等操纵,最后举行排序或聚合等满足最终查询需求的步骤。
(三)谓词信息
谓词即 WHERE 子句中的过滤条件,在执行筹划中会显示哪些谓词用于索引查找,哪些用于最终效果的过滤。如果某个谓词可以或许有效利用索引,说明该过滤条件具有较好的效果,可以快速缩小数据检索范围。反之,如果谓词只能在全表扫描后举行过滤,那大概必要思量优化过滤条件或添加合适索引。例如,“WHERE column_name> 100 AND column_name < 200” 这样的范围谓词,若在索引列上,大概触发索引范围扫描;而 “WHERE function (column_name) = some_value”(函数作用于列上的条件),一般环境下会导致索引失效,引发全表扫描。
四、分析执行筹划的技巧
(一)关注高本钱操纵
执行筹划中的每个操纵都有对应的本钱估算,通常以 COST 值表现,包括 CPU 本钱和 I/O 本钱。重点关注本钱较高的操纵,这些往往是性能瓶颈所在。比如,当发现一个全表扫描操纵的本钱占比很大,且表数据量巨大时,就必要思索是否可以通过创建合适索引、优化查询条件等方式来改变执行筹划,降低本钱。可以通过对比不同优化方案下执行筹划的本钱变化,来评估优化效果。
(二)团结数据量与分布环境