Skip to main content

Node Type of Explain Tree

PostgreSQL

数据访问

SEQ SCAN: 通过顺序扫描输入记录集来查找相关记录,顺序扫描(与索引扫描不同)执行单个读取操作。 CTE SCAN: 对公共表达式(CTE)查询结果执行顺序扫描。请注意,CTE的结果被计算并临时存储(Materialization)。 INDEX SCAN: 根据索引查找相关记录。索引扫描执行两次读取操作:一次读取索引,另一次从表中读取实际值。

INDEX ONLY SCAN: 根据索引查找相关记录。仅索引扫描从索引中执行读取操作,无需访问相应的数据表。 BITMAP HEAP SCAN: 在位图索引扫描返回的磁盘页中搜索相关行。

表关联

NESTED LOOP: 通过循环遍历第一个记录集中的每个记录,尝试在第二个记录集中找到匹配项,返回所有匹配的记录。

MERGE JOIN: 通过首先对它们进行排序(使用连接键)来合并两个记录集。

HASH JOIN: 通过对其中一个记录集进行哈希(使用哈希扫描)来连接两个记录集。

分组

AGGREGATE: 根据GROUP BY或聚合函数(如sum())将记录分组。

HASHAGGREGATE: 根据GROUP BY或聚合函数(如sum())将记录分组;哈希聚合首先使用哈希按键组织记录。

排序

SORT: 根据指定的排序键对记录集进行排序。

Limit

LIMIT: 从记录集中返回指定数量的行。

辅助操作

BITMAP INDEX SCAN: 使用位图索引(每页使用1位的索引)查找所有相关页面。此节点的结果传递给位图堆扫描

MEMOIZE: 用于缓存嵌套循环的内部部分的结果。当当前参数的结果已经在缓存中时,它避免执行底层节点。

HASH: 从输入记录集中的记录生成一个哈希表。哈希表被哈希连接使用。

并行执行

GATHER: 以未定义的顺序读取并汇总并行worker的结果。

GATHER MERGE: 读取并保留并行worker的结果,保持任何排序。

MySQL

TABLE SCAN: 通过顺序扫描输入记录集来查找相关记录。当从表中读取时,Table扫描(与索引扫描不同)执行单个读取操作(仅读取表)。

INDEX LOOKUP: 根据索引查找相关记录。索引扫描执行两次读取操作:一次读取索引,另一次从表中读取实际值。

COVERING INDEX SCAN: 根据索引查找相关记录。仅索引扫描从索引中执行单个读取操作,不从相应的表中读取。

NESTED LOOP JOIN: 通过循环遍历第一个记录集中的每个记录,尝试在第二个记录集中找到匹配项来合并两个记录集。返回所有匹配的记录。

GROUP AGGREGATE: 根据GROUP BY或聚合函数(如sum())将记录分组在一起。哈希聚合首先使用哈希按键组织记录。