PostgreSQL执行计划的解释

PostgreSQL执行计划的解释,第1张

概述一个顺序磁盘页面 *** 作的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.0

一个顺序磁盘页面 *** 作的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.00rows=300000wIDth=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执行计划的解释所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1183279.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存