postgreSQL explain

1. 能够使用的参数

explain(ANALYZE true,VERBOSE true,BUFFERS true,TIMING true,COSTS true,SUMMARY true,FORMAT text) select * from common_change_log where module='';

2. explain 解析

QUERY PLAN
// 发现索引 使用索引
Index Scan using indx_ccl_module on public.common_change_log  (cost=0.27..8.29 rows=1 width=74) (actual time=0.079..0.079 rows=0 loops=1)
	// 输出字段
  Output: id, module, update_by, update_time, comments
  // 索引值为 xxx
  Index Cond: (common_change_log.module = ''::text)
  // 共享缓存中命中了2 个BLOCK
  Buffers: shared read=2
  // 
  I/O Timings: read=0.041
  // 生成查询计划的时间
Planning Time: 4.704 ms
// 实际的SQL 执行时间,其中不包括查询计划的生成时间
Execution Time: 0.121 ms

3.参数含义

【节点类型】

控制节点(Control Node)
扫描节点(ScanNode)
物化节点(Materialization Node)
连接节点(Join Node)

【扫描节点】

Seq Scan,顺序扫描
Index Scan,基于索引扫描,但不只是返回索引列的值
IndexOnly Scan,基于索引扫描,并且只返回索引列的值,简称为覆盖索引
BitmapIndex Scan,利用Bitmap 结构扫描
BitmapHeap Scan,把BitmapIndex Scan 返回的Bitmap 结构转换为元组结构
TID Scan,用于扫描一个元组TID 数组
Subquery Scan,扫描一个子查询
Function Scan,处理含有函数的扫描
TableFunc Scan,处理tablefunc 相关的扫描
Values Scan,用于扫描Values 链表的扫描
CTE Scan,用于扫描WITH 字句的结果集
NamedTuplestore Scan,用于某些命名的结果集的扫描
WorkTable Scan,用于扫描Recursive Union 的中间数据
Foreign Scan,用于外键扫描
Custom Scan,用于用户自定义的扫描

【语句中的选项含义】

ANALYZE 选项为TRUE 会实际执行SQL,并获得相应的查询计划,默认为FALSE。
如果优化一些修改数据的SQL 需要真实的执行但是不能影响现有的数据,可以放在一个事务中,分析完成后可以直接回滚。

VERBOSE 选项为TRUE 会显示查询计划的附加信息,默认为FALSE。
附加信息包括查询计划中每个节点(后面具体解释节点的含义)输出的列(Output),表的SCHEMA 信息,函数的SCHEMA 信息,表达式中列所属表的别名,被触发的触发器名称等。

COSTS 选项为TRUE 会显示每个计划节点的预估启动代价(找到第一个符合条件的结果的代价)和总代价,以及预估行数和每行宽度,默认为TRUE。

BUFFERS 选项为TRUE 会显示关于缓存的使用信息,默认为FALSE。
该参数只能与ANALYZE 参数一起使用。缓冲区信息包括共享块(常规表或者索引块)、本地块(临时表或者索引块)和临时块(排序或者哈希等涉及到的短期存在的数据块)的命中块数,更新块数,挤出块数。

TIMING 选项为TRUE 会显示每个计划节点的实际启动时间和总的执行时间,默认为TRUE。
该参数只能与ANALYZE 参数一起使用。因为对于一些系统来说,获取系统时间需要比较大的代价,如果只需要准确的返回行数,而不需要准确的时间,可以把该参数关闭。

SUMMARY 选项为TRUE 会在查询计划后面输出总结信息,例如查询计划生成的时间和查询计划执行的时间。当ANALYZE 选项打开时,它默认为TRUE。

FORMAT 指定输出格式,默认为TEXT。
各个格式输出的内容都是相同的,其中XML | JSON | YAML 更有利于我们通过程序解析SQL 语句的查询计划,为了更有利于阅读,我们下文的例子都是使用TEXT 格式的输出结果

参考:
https://zhuanlan.zhihu.com/p/414089692

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值