- “->”(箭头)
- 含义:表示数据的流向,用于展示执行计划中各个操作之间的顺序和数据传输关系。它可以帮助你理解查询是如何从一个操作阶段进入到下一个操作阶段的。
- 示例:如果有一个简单的查询涉及到表扫描和过滤操作,如 “SELECT * FROM table WHERE column> 10”,在执行计划中可能会看到表扫描操作后面跟着一个箭头指向过滤操作,表示数据从表扫描阶段流向过滤阶段。
- “Seq Scan”(顺序扫描)
- 含义:表示对表进行顺序扫描。这意味着数据库会逐行读取表中的数据,没有使用索引来加速数据访问。通常在没有合适的索引或者查询需要访问表中大部分数据时会出现这种操作。
- 示例:对于一个小型表或者查询条件涉及到表中大部分行的情况,如 “SELECT * FROM small_table”(假设 small_table 没有合适的索引并且数据量小),执行计划中可能会出现 “Seq Scan on small_table”。
- “Index Scan”(索引扫描)
- 含义:表明查询是通过扫描索引来获取数据的。这比顺序扫描通常更高效,尤其是当查询条件可以通过索引快速定位到相关行时。
- 示例:对于查询 “SELECT column1 FROM indexed_table WHERE indexed_column = 'value'”(假设 indexed_table 的 indexed_column 列有索引),执行计划可能会显示 “Index Scan using indexed_column_idx on indexed_table”(其中 indexed_column_idx 是索引名称)。
- “Bitmap Heap Scan” 和 “Bitmap Index Scan”
- 含义:
- “Bitmap Heap Scan”:通常与 “Bitmap Index Scan” 一起使用。首先通过 “Bitmap Index Scan” 构建一个位图,用于标记符合条件的行在表中的位置,然后通过 “Bitmap Heap Scan” 根据位图来访问实际的表数据。这种方式在某些复杂的查询条件下可以提高效率。
- “Bitmap Index Scan”:用于构建位图来表示符合索引条件的行的位置信息。
- 示例:在一个查询中有多个条件并且有合适的索引时,可能会出现这两个操作。比如 “SELECT * FROM table WHERE column1 = 'value1' AND column2> 10”(假设 column1 和 column2 都有索引),可能会先进行 “Bitmap Index Scan” 构建位图,然后 “Bitmap Heap Scan” 根据位图获取表数据。
- 含义:
- “Hash Join”(哈希连接)和 “Nested Loop Join”(嵌套循环连接)
- 含义:
- “Hash Join”:这是一种连接表的方式。它通过对连接键计算哈希值,将数据划分到不同的哈希桶中,然后在匹配的哈希桶中查找匹配的行来完成连接操作。这种连接方式在某些情况下(如连接键上没有索引或者数据量较大时)效率较高。
- “Nested Loop Join”:将一个表(外部表)的每一行与另一个表(内部表)的每一行进行匹配组合,对于每一行外部表的数据,都要遍历内部表的所有行来查找匹配的行。这种连接方式在某些小数据集或者有合适索引的情况下可能比较有效。
- 示例:对于连接两个表的查询 “SELECT * FROM table1 JOIN table2 ON table1.column = table2.column”,根据表的大小、索引情况等因素,可能会出现 “Hash Join” 或者 “Nested Loop Join” 在执行计划中。
- 含义:
- “Sort”(排序)
- 含义:表示对查询结果进行排序操作。这可能是因为查询中有 “ORDER BY” 子句或者某些操作(如分组操作 “GROUP BY” 后可能需要排序)要求数据按特定顺序排列。
- 示例:对于查询 “SELECT column1 FROM table ORDER BY column1”,执行计划中可能会出现 “Sort (cost=... keys=column1)”,其中 “cost” 表示排序操作的估计成本,“keys” 表示排序的键。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




