对PostgreSQL的执行计划的初步学习
开始
table 的状况:
[作者:技术者高健@博客园 mail: luckyjackgao@gmail.com ]
postgres=# analyze gaotab; ANALYZE postgres=# select a.relpages, a.reltuples, a.relfilenode,a.reltype,b.typname from pg_class a, pg_type b where a.relname like 'gaotab%' and a.reltype=b.oid; relpages | reltuples | relfilenode | reltype | typname ----------+-----------+-------------+---------+--------- 1 | 100 | 16387 | 16386 | gaotab (1 row)
成本参数:
postgres=# show seq_page_cost; seq_page_cost --------------- 1 (1 row) postgres=# show cpu_tuple_cost; cpu_tuple_cost ---------------- 0.01 (1 row)
postgres=# show cpu_operator_cost; cpu_operator_cost ------------------- 0.0025 (1 row)
查询的代价:
postgres=# explain select * from gaotab; QUERY PLAN --------------------------------------------------------- Seq Scan on gaotab (cost=0.00..2.00 rows=100 width=17) (1 row) postgres=#
这么一个普通的查询所有记录的语句,具体执行的时候,首先要读取磁盘页面,然后是把每一条记录取出来。没有多余的运算。
所以,其计划类型为 Seq Scan,而其代价为:
relpages * seq_page_cost + reltuples * cpu_tuple_cost =1×1 + 100×0.01=2
再来:
postgres=# explain select * from gaotab where id=15; QUERY PLAN ------------------------------------------------------- Seq Scan on gaotab (cost=0.00..2.25 rows=1 width=17) Filter: (id = 15) (2 rows)
此时,由于有了一个 判断 id=15 的运算,成本还要高一些,此时用到了 cpu_operator_cost:
relpages * seq_page_cost + reltuples * cpu_tuple_cost + reltuples* cpu_operator_cost
=1*1+100*0.01+100*0.0025=2.25
[作者:技术者高健@博客园 mail: luckyjackgao@gmail.com ]
结束
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下