执行计划查看命令
explain[(option[,…])]
explain [analyze][verbose]statement
可选的option选项有:
analyze[boolean]:得到statement的真实运行时间。默认是false
verbose[boolean]:得到statement语句的执行计划和执行计划中的每个节点的详细信息。默认为false
costs[boolean]:得到计划中每个接地哪的cost,rows,width的估算值,默认为true
buffers[boolean]:analyze出现时可选。缓存的使用情况
共享缓存(shared blocks)的hit,read,dirtied,written数值
本地缓存(local blocks)的hit,read,dirtied,written数值
临时快(temp blocks)的read,written数值
timing[boolean]:analyze出现时可选。显示每个节点的启动时间和总时间花费。默认true
format{text|xml|json|yaml}:指定执行计划的输出格式
text:默认值。以行为单位,显示每个结点的计划信息,以缩进格式表示子节点的计划信息。buffers参数时的文本格式,只输出非零值
xml:xml格式
json:json格式
yaml:以yaml格式显示执行计划
常用组合
一般查询
explain analyze select … ;
查询缓存及详细信息
explain (analyze,verbose,buffers) select … ;
针对更新插入删除的执行计划查询
begin;
explain analyze insert/update/delete … ;
rollback;
查询计划解读
关键字
cost:重要的指标。cost=0.00…16.11有两个部分,启动时间=0.00 和总时间=16.11。单位是毫秒。这个指标也只是预测值。启动时间也有解释为找到符合条件的第一行所花的时间。
rows:返回的行数,如果执行vacuum和analyze那么返回的结果更加接近实际值
width:查询结果所有字段的总宽度,并非关键指标。
actual time:实际花费的时间。
loops:循环的次数
buffers:缓冲命中数
output: 输出的字段名
planning time: 生成执行计划时间
execution time:执行执行计划时间
阅读顺序
嵌套层次最深的,最先执行
同样嵌套深度的,从上到下,先予执行
每一步的cost包括上一步
节点
Seq Scan: 表扫描
Index Scan:索引扫描(读取索引块,然后读取数据文件)
Index Only Scan:索引只读扫描(只读取索引文件,根据映射文件获取数据)
Nested [(type)] Loop:嵌套循环连接。type可能是Inner,left,right,full,semi,anti。inner的可以显示省略
Merge[(type)] Join 归并连接。type同上
Hash[(type)] Join:哈希连接。type同上
————————————————
版权声明:本文为CSDN博主「Walter Sun」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Soul_Programmer_Swh/article/details/89424092