SQL查询的执行过程,就像工厂的加工流水线,层层递进,最终得到想要的结果,而SQL算子就好比其中的一道道工序。
本篇简要介绍一下SQL执行计划中,一些常见算子的含义和逻辑。
• indexscan 索引扫描
当数据表中创建了索引,并使用索引字段进行查询时,会进行索引扫描。
• tablescan 顺序表扫描
tablescan 负责从磁盘中以连续块的形式从磁盘中读取数据页。
一般在SQL查询中,有几张表就要有几个 tablescan 操作。在分布式数据库中,同一张表的扫描,还会被分配到多个结点使用分布式的方式执行。
• project 投影
投影操作,是从表中根据查询字段选择相关的列。
select cc_name, cc_class
from call_center
where cc_class = ‘large’
limit 10;
在这个查询中,tablescan 操作会将 call_center 表的数据做全字段读取,project 操作负责筛选出 cc_name, cc_class 这两个列。
• filter 过滤
filter 会根据 where 条件中的筛选条件,筛选出符合的记录。其中过滤条件也叫谓词逻辑。
在两表连接时,谓词逻辑可以在 join 前执行,也可以在 join 后执行。因为 join 操作是做笛卡尔积,如果在 join 后执行谓词逻辑,将大大增加计算的基数,所以一般的数据库优化执行器都会将谓词下推,让谓词逻辑在join操作前完成。
上述的 project 和 filter 算子可以在数据表的列和行两个维度对数据进行限定,大大缩小处理的数据量,降低资源消耗,是SQL优化时常用的方法。
• exchange
在分布式数据库中,tablescan 等操作是分布式进行的,而各个分支结点将结果汇总的过程就是 exchange 操作。
exchange 操作还可以细分为 LocalExchange 和 RemoteExchange。LocalExchange 即本地数据结果汇总,没有网络IO;而RemoteExchange是数据从不同的数据结点汇

本文介绍了SQL查询中的关键算子,包括索引扫描、顺序表扫描、投影、过滤、交换、连接、聚合、标量、窗口函数等,并在分布式数据库环境中探讨其作用和优化策略,帮助理解SQL执行计划。
最低0.47元/天 解锁文章
871

被折叠的 条评论
为什么被折叠?



