其思想是,在每个步骤中都有1或2个数据集到达并按照某种规则进行处理。如果只有一个数据集,则对该数据集执行该操作。(例如,通过扫描索引来确定需要哪些行、筛选数据集或对其进行排序。)如果有两个,那么这两个数据集就是进一步缩进的两个元素,并且它们通过您看到的规则连接在一起。大多数规则的含义可以很容易猜到(特别是如果你以前读过一大堆解释计划的话) ,但是你可以试着通过查看文档或者(更容易)通过把短语和一些像 EXPLAIN这样的关键词一起扔进 Google 来验证单个条目。
组件什么时候需要进行大量处理才能开始输出任何行?有很多可能的原因,但是让我们看一个清晰的例子。下面是之前的同一个查询,但现在包含一个 ORDER BY子句:
EXPLAIN SELECT * FROM post ORDER BY body LIMIT 50;
Limit (cost=23283.24..23283.37 rows=50 width=422)
-> Sort (cost=23283.24..23859.27 rows=230412 width=422)
Sort Key: body
-> Seq Scan on post (cost=0.00..15629.12 rows=230412 width=422)