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

执行计划查看命令

    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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分析 PostgreSQL SQL 语句的执行计划时,可以使用 EXPLAIN 关键字来获取查询计划的详细信息。EXPLAIN 关键字可以与 SELECT、INSERT、UPDATE 或 DELETE 语句一起使用。 执行 EXPLAIN 查询时,PostgreSQL 会返回一个描述查询计划的结果集。这个结果集包含了查询计划中每个步骤的详细信息,包括使用的索引、连接类型、排序方式等等。 以下是分析 PostgreSQL SQL 语句执行计划的步骤: 1. 在 SQL 语句前加上 EXPLAIN 关键字,例如:EXPLAIN SELECT * FROM table_name; 2. 执行该 SQL 语句,获取查询计划的结果集; 3. 分析结果集中的每一行,了解查询计划中每个步骤的执行顺序和详细信息; 4. 根据查询计划的结果,优化 SQL 语句或数据库结构,以提高查询性能。 在分析查询计划时,可以关注以下几个重要的信息: - 节点类型:描述了执行计划中每个步骤的类型,例如 Seq Scan(顺序扫描)、Index Scan(索引扫描)、Nested Loop(嵌套循环连接)等; - 访问方法:描述了节点类型所使用的具体访问方法,例如使用哪个索引、使用哪种连接算法等; - 过滤条件:描述了节点类型所使用的过滤条件,可以帮助判断是否需要添加索引或优化查询条件; - 排序方式:描述了节点类型所使用的排序方式,可以帮助判断是否需要添加排序索引; - 执行计划的顺序:描述了查询计划中每个步骤的执行顺序,可以帮助判断是否存在性能瓶颈。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值