postgresql——执行计划查看方式与计划分析

本文介绍了如何在PostgreSQL中查看执行计划,包括使用`explain`命令的不同选项,如analyze、verbose、costs等。同时,文章详细解析了执行计划的关键信息,如cost、rows和width等,以及执行计划的阅读顺序和节点类型,如Seq Scan、Index Scan等,帮助读者深入理解查询优化过程。

欢迎关注博主订阅号!

执行计划查看命令

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同上
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Walter Sun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值