首页 > 数据库 >PostgreSQL explain使用

PostgreSQL explain使用

时间:2023-07-19 23:01:05浏览次数:35  
标签:rows PostgreSQL .. shx sno explain boolean 使用 执行

1. 概述

PostgreSQL 为每个收到的查询产生一个执行计划,这个执行计划是一个非完全的二叉树。通过这个执行计划,DBA或者应用人员可以清晰的了解到某个SQL在数据库中的预估的执行情况以及实际的执行情况,也能根据执行计划中资源的消耗判断性能的瓶颈点,从而对该SQL进行有针对性的优化。下面通过 explain 语法来获取数据库中解析之后的执行计划,方便使用人员去阅读。

2. 语法

shxdb=# \h explain 
Command:     EXPLAIN
Description: show the execution plan of a statement
Syntax:
EXPLAIN [ ( option [, ...] ) ] statement
EXPLAIN [ ANALYZE ] [ VERBOSE ] statement

where option can be one of:

    ANALYZE [ boolean ]
    VERBOSE [ boolean ]
    COSTS [ boolean ]
    SETTINGS [ boolean ]
    BUFFERS [ boolean ]
    TIMING [ boolean ]
    SUMMARY [ boolean ]
    FORMAT { TEXT | XML | JSON | YAML }

URL: https://www.postgresql.org/docs/12/sql-explain.html

option解释:

  • ANALYZE:默认关闭(false),如果以默认关闭的情况下使用 explain语法,那么获取到的结果便是数据库通过统计信息生成预计执行的执行计划,SQL并不会实际执行。
  • VERBOSE:默认关闭。如果打开,会显示一些执行计划的附加信息,比如:Output(输出的列),表的schema信息,函数的schema信息等。
  • BUFFERS:默认关闭。打开会显示关于缓存的使用信息。缓冲区信息包括共享块(常规表或者索引块)、本地块(临时表或者索引块)和临时块(排序或者哈希等涉及到的短期存在的数据块)的命中块数,更新块数,挤出块数。
  • COSTS:默认打开,显示每个计划节点的预估启动代价(找到第一个符合条件的结果的代价)和总代价,以及预估行数和每行宽度。
  • SUMMARY:在查询计划后面输出总结信息,例如查询计划生成的时间和查询计划执行的时间
  • FORMAT:指定输出格式,比如:TEXT | XML | JSON | YAML

3. 示例

通过对下面两张表进行关联查询,获取SQL的执行计划

shx=# \d student 
                       Table "shx.student"
 Column |         Type          | Collation | Nullable | Default 
--------+-----------------------+-----------+----------+---------
 sno    | integer               |           |          | 
 sname  | character varying(30) |           |          | 
 ssex   | character varying(2)  |           |          | 

shx=# \d score 
                 Table "shx.score"
 Column |  Type   | Collation | Nullable | Default 
--------+---------+-----------+----------+---------
 sno    | integer |           |          | 
 cno    | integer |           |          | 
 degree | integer |           |          |

查询SQL

explain (analyze, buffers, verbose)
select * from student a, score b 
where a.sno = b.sno;

执行计划结果

QUERY PLAN                                                       
-----------------------------------------------------------------------------------------------------------------------
 Hash Join  (cost=24.85..295.97 rows=6732 width=106) (actual time=0.029..0.033 rows=7 loops=1)
   Output: a.sno, a.sname, a.ssex, b.sno, b.cno, b.degree
   Hash Cond: (b.sno = a.sno)
   Buffers: shared hit=2
   ->  Seq Scan on shx.score b  (cost=0.00..30.40 rows=2040 width=12) (actual time=0.007..0.008 rows=7 loops=1)
         Output: b.sno, b.cno, b.degree
         Buffers: shared hit=1
   ->  Hash  (cost=16.60..16.60 rows=660 width=94) (actual time=0.009..0.010 rows=5 loops=1)
         Output: a.sno, a.sname, a.ssex
         Buckets: 1024  Batches: 1  Memory Usage: 9kB
         Buffers: shared hit=1
         ->  Seq Scan on shx.student a  (cost=0.00..16.60 rows=660 width=94) (actual time=0.003..0.004 rows=5 loops=1)
               Output: a.sno, a.sname, a.ssex
               Buffers: shared hit=1
 Planning Time: 0.118 ms
 Execution Time: 0.091 ms
(16 rows)

标签:rows,PostgreSQL,..,shx,sno,explain,boolean,使用,执行
From: https://blog.51cto.com/u_13482808/6781206

相关文章

  • postgresql-备份恢复
    1、逻辑备份恢复pg_dump/pg_restore命令备份恢复对数据库或表备份恢复##备份指定的数据库test$pg_dump-Upostgres-W-h192.168.3.122-p1921test>/pgdata/dumpbak/test.sql##备份指定库中的某个表t1$pg_dump-Upostgres-W-h192.168.3.122-p1921test......
  • 代码管理工具git的使用
    1.git概述git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是LinusTorvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。2. git工作流程图工作流程图如图所示,黄色部分为工作区,index为暂存区,Repository为......
  • 使用Canal同步mysql数据到es
    一、简介Canal主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费。当前的canal支持源端MySQL版本包括5.1.x,5.5.x,5.6.x,5.7.x,8.0.x二、工作原理MySQL主备复制原理MySQLmaster将数据变更写入二进制日志(binarylog,其中记录叫做二进制日志事件bin......
  • Docker--了解及基础使用篇
    Docker--了解及基础使用篇Docker架构:Docker包括三个基本概念:镜像(Image):Docker镜像(Image),就相当于是一个root文件系统。比如官方镜像ubuntu:16.04就包含了完整的一套Ubuntu16.04最小系统的root文件系统。容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对......
  • 红帽系统的使用centos的源镜像
    背景介绍:红帽系统的不能使用centos的源镜像。重新安装yum工具让红帽系统可以使用centos的源。 查看系统版本cat/etc/redhat-release 1.卸载旧的yum工具rpm-qa|grepyum|xargsrpm-e--nodeps(不检查依赖,直接删除rpm包)rpm-qa|greppython-urlgrabber|xargsrpm-......
  • mq json转换器 JSON泛型反序列化, 多层嵌套,使用 TypeReference
     需求解析JSON,并将其转换为对应的数据结构。例如:转换为Map<String,Object>  ......
  • 使用Canal同步mysql数据到es
    一、简介Canal主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费。当前的canal支持源端MySQL版本包括5.1.x,5.5.x,5.6.x,5.7.x,8.0.x二、工作原理MySQL主备复制原理MySQLmaster将数据变更写入二进制日志(binarylog,其中记录叫做二进制日志......
  • 产品FAQ设计方法论,使用FAQ制作工具真的可以事半功倍?
    很多在线产品开发者都会设置一份产品使用答疑FAQ,帮助同事/客户更好地了解自己的产品,并快速解决产品应用过程中的问题。 产品FAQFAQ的意思为常见问题的解答,是一种在线的帮助文档。因科技发展的迅速,很多新的技术脱颖而出,各种技术在不同的行业中穿插使用,越来越多的新名词出现,新的技术......
  • 如何使用CCXT交易数字货币现货
    更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。数字货币现货标准化接口数字货币市场与股票、期货市场最大的不同点在于数字货币主流交易所数量很多。举个例子,如果我们需要交易螺纹钢期货(RB),我们只能选择上海期货交易所。然而,如果我们想交易比......
  • Windows下将“使用VSCode打开”添加至右键菜单“
    Windows下将“使用VSCode打开”添加至右键菜单"本文转载自 Windows下将“使用VSCode打开”添加至右键菜单",特此记录收藏一下。问题:Windows上面安装VisualStudioCode编辑器后,常常会因为安装的时候忘记勾选等原因,没有将OpenwithCode(右键快捷方式)"添加到鼠标右键菜单里,所......