如何看懂Postgres的执行计划test=# insert into test select id from (select generate_series(1,10000000))ids(id);
INSERT 0 10000000
Time: 39656.016 mstest=# select * from test where id=1;id
----1
(1 row)Time: 922.950 ms
test=# explain select * from test where id=1;QUERY PLAN
-------------------------------------------------------------Seq Scan on test  (cost=0.00..185288.50 rows=56416 width=4)Filter: (id = 1)
(2 rows)Time: 5633.156 ms
test=# create index idx_test on test(id);
CREATE INDEX
Time: 24070.007 mstest=# analyze verbose test;
INFO:  analyzing "public.test"
INFO:  "test": scanned 30000 of 44248 pages, containing 6779952 live rows and 0 dead rows; 30000 rows in sample, 9999995 estimated total rows
ANALYZE
Time: 498.612 mstest=#  select * from test where id=100;id
-----100
(1 row)
Time: 3.740 mstest=# explain  select * from test where id=100;QUERY PLAN
--------------------------------------------------------------------------Index Only Scan using idx_test on test  (cost=0.43..8.45 rows=1 width=4)Index Cond: (id = 100)
(2 rows)Time: 1.091 mscost=说明:第一个数字0.43表示启动cost,这是执行到返回第一行时需要的cost值。
第二个数字8.45表示执行整个SQL的cost表顺序扫描由于是立即可以获得第一行,所以启动时间一般都是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后加analyze来通过真实执行这个SQL来获得真实的执行计划和执行时间:.
test=# explain  analyze select * from test where id=100;QUERY PLAN
--------------------------------------------------------------------------------------------------------------------Index Only Scan using idx_test on test  (cost=0.43..8.45 rows=1 width=4) (actual time=0.021..0.021 rows=1 loops=1)Index Cond: (id = 100)Heap Fetches: 1Planning time: 0.806 msExecution time: 0.769 ms
(5 rows)

如何看懂Postgres的执行计划相关推荐

  1. 查看正在执行的事务_看懂sql_trace--分析执行计划及CBO行为

    概述 Oracle数据库排查问题.实验测试.优化的时候一般都会用到trace文件来分析,这里面就涉及到sql_trace跟10046事件了,下面分别做一下介绍. SQL_TRACE SQL_TRACE ...

  2. [转]怎样看懂Oracle的执行计划

    在oracle11g中执行计划的显示结果: 按照the rightmost-uppermost(最右最上) operation of an explain 规则来分析执行计划. 在oracle9i中执 ...

  3. 怎样看懂Oracle的执行计划

    尽量用鸟语描述了,翻译成中文反而容易误解. 一.什么是执行计划 An explain plan is a representation of the access path that is taken ...

  4. MySQL进阶之路(二十)—— 5分钟看懂SQL的执行计划

    5分钟看SQL的执行计划 一.概述 ​ 如果你想优化SQL语句,那么SQL执行计划就是必须要知道的,因为只有通过SQL的执行计划,你才可以知道SQL是如何进行查询的,以及否走索引.用的是什么索引.是否 ...

  5. 学习如何看懂SQL Server执行计划(三)——连接查询篇

    三.连接查询部分 --------------------嵌套循环-------------------- /* UserInfo表数据少.Coupon表数据多 嵌套循环可以理解为就是两层For循环, ...

  6. mysql执行计划缓存在哪_怎么去看懂mysql的执行计划

    mysql的查看执行计划的语句很简单,explain+你要执行的sql语句就OK了. 举一个例子 EXPLAIN SELECT * from employees where employees.gen ...

  7. [Hive]看懂Hive的执行计划

    关于Hive执行计划简述 一般执行计划有两个部分:  stage dependencies 各个stage之间的依赖性  stage plan 各个stage的执行计划 一个stage并不一定是一个M ...

  8. 一文读懂 MySQL Explain 执行计划

    一.前言 上周老周的一个好朋友让我出一篇教你读懂 SQL 执行计划,和我另一位读者反馈的面试题如何排查慢 SQL 的强相关,索性先出一篇一文读懂 MySQL Explain 执行计划.Explain ...

  9. oracle sql 执行计划分析_《真正读懂Oracle SQL执行计划》

    maclean_0071人评论1235人阅读2013-10-25 15:18:12 [视频教学:性能优化]Maclean Liu的Oracle性能优化讲座第一回<真正读懂Oracle SQL执行 ...

最新文章

  1. AI安防实现单点突破 距全面开花还有多远?
  2. HDU1568 Fibonacci
  3. 通过在操作系统中实际操作,学习和理解 Unicode 编码相关知识
  4. mysql 导出csv 多列_从包含300多列的csv,txt或xls文件创建MySQL表
  5. python爬取网上租房信息_Python爬虫入门 | 5 爬取小猪短租租房信息
  6. 在矩池云上Hugging Face使用清华源
  7. DockOne微信分享(七十七):用Harbor实现容器镜像仓库的管理和运维
  8. jquery属性过滤选择器[attr=value]、[attr!=value]、[attr^=value]、[attr$=value]、[attr*=value]、[attr|=value]
  9. 使用极大似然法对逻辑回归中的参数进行估计的数学原理
  10. html 实现音乐的波形,GitHub - wanlixi/html5-audio: 展示html5提供的强大的音频控制API...
  11. 2022年上海房地产研究报告
  12. 【JZOJ6124】有限空间跳跃理论
  13. 【python逻辑算法题】一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法
  14. MyBatis-Plus——自动填充功能实现
  15. 营销模式线上与线下相结合
  16. 余华《活着》日本版自序
  17. Linux下穿件带点文件夹和隐藏文件显示隐藏文件命令
  18. 国内下载vscode速度慢问题解决
  19. Linux Wifi共享上网脚本,类似win 7的Connectify工具
  20. 十分钟看懂docker

热门文章

  1. linux 下 gtest 的安装
  2. Worker Thread UserInterface Thread
  3. RUST——互斥锁的使用
  4. python rolling regression. 使用 Python 实现滚动回归
  5. 方法总结分享|金融时间序列联动相关及风险溢出
  6. ssh连接linux_使用内网穿透访问内网ssh图文教程
  7. python 鼠标轨迹录制_按键鼠标轨迹录制大师
  8. Matlab kaiser窗 C++实现
  9. ubuntu20.04安装配置Qt5.15.2
  10. TP4056/4057/4054充电不转灯闪FAE技术