[Postgres] 如何读懂执行计划:参数解释

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Postgres] 如何读懂执行计划:参数解释相关的知识,希望对你有一定的参考价值。

参考技术A 1. cost

含义:这个计划节点的预计的启动开销和总开销

详细描述:启动开销是指一个计划节点在返回结果之前花费的开销,如果是在一个排序节点里,那就是指执行排序花费的开销。 总开销是指一个计划节点从开始到运行完成,即所有可用行被检索完后,总共花费的开销。实际上,一个节点的父节点可能会在子节点返回一部分结果后,停止继续读取剩余的行,如Limit节点。

2. rows

含义:这个计划节点的预计输出行数

详细描述:在带有ANALYZE选项时,SQL语句会实际运行,这时一个计划节点的代价输出会包含两部分,前面部分是预计的代价,后面部分是实际的代价。前面部分中rows是指预计输出行数,后面部分是指实际输出行数。如果中间节点返回的数据量过大,最终返回的数据量很小,或许可以考虑将中间节点以下的查询修改成物化视图的形式。

3. width

含义:这个计划节点返回行的预计平均宽度(以字节计算)

详细描述:如果一个扫描节点返回行的平均宽度明显小于子节点返回行的平均宽度,说明从子节点读取的大部分数据是无用的,或许应该考虑一下调整SQL语句或表的相关设计,比如让执行计划尽量选择Index Only Scan,或者对表进行垂直拆分。

4. actual time

含义:这个计划节点的实际启动时间和总运行时间

详细描述:启动时间是指一个计划节点在返回第一行记录之前花费的时间。 总运行时间是指一个计划节点从开始到运行完成,即所有可用行被检索完后,总共花费的时间。

5. loops

含义:这个计划节点的实际重启次数

详细描述:如果一个计划节点在运行过程中,它的相关参数值(如绑定变量)发生了变化,就需要重新运行这个计划节点。

6. Filter

含义:这个扫描节点的过滤条件

详细描述:对于一个表的扫描节点,如果相关的条件表达式不能对应到表上的某个索引,可能需要分析一下具体的原因和影响,比如该表相关的字段在表达式中需要进行隐式类型转换,那么即使在该字段上存在索引,也不可能被使用到。如:((b.intcol)::numeric > 99.0)

7. Index Cond

含义:这个索引扫描节点的索引匹配条件

详细描述:说明用到了表上的某个索引。

8. Rows Removed by Filter

含义:这个扫描节点通过过滤条件过滤掉的行数

详细描述:如果一个扫描节点的实际输出行数明显小于通过过滤条件过滤掉的行数,说明这个计划节点在运行过程中的大量计算是无用的,或者说是没有实际产出的,那么这个SQL语句或者表的相关设计可能不是特别好。

以上是关于[Postgres] 如何读懂执行计划:参数解释的主要内容,如果未能解决你的问题,请参考以下文章

一文读懂 MySQL Explain 执行计划

一文读懂 MySQL Explain 执行计划

一文读懂 MySQL Explain 执行计划

修改 Postgres 9.0 查询计划

读懂执行计划

使用 10046 查看执行计划并读懂 trace 文件