PostgreSQL执行计划的解释
一个顺序磁盘页面操作的cost值由系统参数seq_page_cost (floating point)参数指定的,由于这个参数默认为1.0,所以我们可以认为一次顺序磁盘页面操作的cost值为1。
下面
osdba=# explain select * from t;
QUERY PLAN
———————————————————-
Seq Scan on t (cost=0.00 ..4621.00 rows=300000 width=10 )
(1 row)
cost=说明:
- 第一个数字0.00表示启动cost,这是执行到返回第一行时需要的cost值。
- 第二个数字4621.00表示执行整个SQL的cost
可以explain后加analyze来通过真实执行这个SQL来获得真实的执行计划和执行时间:.
osdba=# EXPLAIN ANALYZE SELECT * FROM t;
QUERY PLAN
-----------------------------------------------------------------------------------------------------------
Seq Scan on t (cost=0.00..4621.00 rows=300000 width=10) (actual time=0.022 ..355.380rows=300000 loops=1)
Total runtime: 696.074 ms
actual time=中的第一个数字表示返回第一行需要的时间(叫启动时间),第二个数字表示执行这个整个花的时间。后面的rows=300000是实际的行数。
表顺序扫描由于是立即可以获得第一行,所以启动时间一般都是0,而如果是排序操作,则需要处理完所有行后才能返回第一行,所以排序操作是需要启动时间的,下表列出了哪些操作是需要启动时间的,哪些操作不是需要的:
执行计划运算类型 | 操作说明 | 是否有启动时间 |
---|---|---|
Seq Scan | 扫描表 | 无启动时间 |
Index Scan | 索引扫描 | 无启动时间 |
Bitmap Index Scan | 索引扫描 | 有启动时间 |
Bitmap Heap Scan | 索引扫描 | 有启动时间 |
Subquery Scan | 子查询 | 无启动时间 |
Tid Scan | ctid = …条件 | 无启动时间 |
Function Scan | 函数扫描 | 无启动时间 |
Nested Loop | 循环结合 | 无启动时间 |
Merge Join | 合并结合 | 有启动时间 |
Hash Join | 哈希结合 | 有启动时间 |
Sort | 排序,ORDER BY操作 | 有启动时间 |
Hash | 哈希运算 | 有启动时间 |
Result | 函数扫描,和具体的表无关 | 无启动时间 |
Unique | DISTINCT,UNION操作 | 有启动时间 |
Limit | LIMIT,OFFSET操作 | 有启动时间 |
Aggregate | count, sum,avg, stddev集约函数 | 有启动时间 |
Group | GROUP BY分组操作 | 有启动时间 |
Append | UNION操作 | 无启动时间 |
Materialize | 子查询 | 有启动时间 |
SetOp | INTERCECT,EXCEPT |
有启动时 |
explain select distinct course_id from course where course_term = 'Fal02';
NOTICE: QUERY PLAN:
Unique (cost=12223.09..12339.76 rows=4667 width=4)
-> Sort (cost=12223.09..12223.09 rows=46666 width=4)
-> Seq Scan on course (cost=0.00..8279.99 rows=46666 width=4)
1.从下往上读
2.explain报告查询的操作,开启的消耗,查询总的消耗,访问的行数 访问的平均宽度
3.开启时间消耗是输出开始前的时间例如排序的时间
4.消耗包括磁盘检索页,cpu时间
5.注意,每一步的cost包括上一步的
6.重要的是,explain 不是真正的执行一次查询 只是得到查询执行的计划和估计的花费
索引有用条件 当满足特定条件的元组数小于总的数目
PostgreSQL执行计划的解释相关推荐
- postgresql 执行计划理解
2019独角兽企业重金招聘Python工程师标准>>> 首先看下postgresql 执行计划中的一些术语和关键字. 执行计划运算类型 操作说明 是否有启动时间 Seq Scan 扫 ...
- PostgreSQL 执行计划与实际成本的偏差
一. 嵌套循环连接, 外表的关联字段存在大量重复值时, 总成本存在偏差. 二. 合并连接, 关联字段少部分相交, 总成本远小于子节点的成本和. 因为任何一个表都只需要扫描到匹配结束. 三. 使用LIM ...
- PostgreSQL执行计划
简介 PostgreSQL是"世界上最先进的开源关系型数据库".因为出现较晚,所以客户人群基数较MySQL少,但是发展势头很猛,最大优势是完全开源. MySQL是"世界上 ...
- PostgreSql 执行计划
语法 explain (analyze true|false,verbose true|false,costs true|false,buffers true|false,format text|xm ...
- 使用pg_hint_plan固定Postgresql执行计划
pg_hint_plan版本1.5:https://github.com/ossc-db/pg_hint_plan/blob/PG15/docs/hint_details.md postgresql版 ...
- mysql执行计划字段解释
id id值有相同,又有不同:id值越大越优先:id值相同,从上往下顺序执行 select_type 查询类型 PRIMARY:包含子查询SQL中的主查询(最外层) SUBQUERY:包含子查询SQL ...
- 关于PostgreSQL执行计划中的Bitmap Heap Scan、Bitmap Index Scan、Recheck Cond
D:\highgo\database\5.6.3\bin>psql -d highgo -U highgo -p 5868 用户 highgo 的口令: psql (5.6.3)PSQL: Re ...
- Postgresql学习笔记之——SQL 执行计划
一.执行计划的解释 1.explain 命令 语法: EXPLAIN [ ( option [, ...] ) ] statement EXPLAIN [ ANALYZE ] [ VERBOSE ] ...
- <POSTGRESQL修炼之道:从小工到专家>之PostgreSQL中执行计划(1-3结)
文章目录 一.执行计划的解释 1.EXPLAIN命令 2.EXPLAIN输出结果解释 3.EXPLAIN使用示例 4.全表扫描 5.索引扫描 6.位图扫描 7.条件过滤 8.Nestloop Join ...
最新文章
- Android 判断某个服务是否正在运行
- 解决IIS中HTTP/1.1 500 Server Error错误的方法
- c# java gt;gt;gt;,相同的字节数组=gt; Java和C#中的不同BigInteger值
- SpringCloud之微服务
- resnet50加入fpn_FPN+SSD同时兼顾速度和精度的检测器(二)
- html5 拖拽上传文件时,屏蔽浏览器默认打开文件
- 线程组之间的JMeter传递变量
- 苹果将允许应用用户转至Web端付费,免除30% 佣金
- 遇见Python.h: No such file or directory的解决方法
- qt android 悬浮窗,Qt悬浮窗实现
- 坐标系转换--筛选高于RMS的强源-------ska暑期训练
- fckeditor for php 下载,FCKeditor 的配置和使用方法(for PHP)
- 计算电磁学中的矩量法及其求解过程介绍
- linux steam安装目录,如何在Ubuntu Linux上下载和安装Steam
- Ubuntu安装Jenkins
- vbs编程中 on error resume next的意思
- python非法的标识符_Python标识符
- 手机微信html文件怎么打开方式,手机微信页面如何用web浏览器打开
- 【task02】共享单车数据挖掘赛
- 央行数字货币研究所与农信银资金清算中心合作推进数字人民币应用