第17课:扫描代价计算

本文详细介绍了PostgreSQL中顺序扫描(SeqScan)和索引扫描(IndexScan)的代价计算方法,包括IO代价和CPU代价。讨论了不同选择率、约束条件对扫描方式的影响,以及如何根据硬件环境调整代价模型。强调了顺序IO和随机IO的差异,并分析了在不同索引和约束条件下,优化器选择最优路径的策略。
摘要由CSDN通过智能技术生成

接下来我们会分别介绍 3 种物理路径的代价计算方法,这样读者就能跟着这种计算的过程了解代价计算的流程。需要注意的是读者朋友们可以不用过度关注计算的准确性,而是把注意力集中在 PostgreSQL 代价模型的思想上。

由于 SQL 是描述性语言,所以它只需要告诉我们执行结果,它不关心执行的过程。假如有很多可以获得执行结果的手段,那么我们当然是想获得一个效率最高的——也就是说条条大路通罗马,但我们一定要选一个最短的路来走。在 PostgreSQL 数据库中也把这些数据的访问方法称为“路径”(Path),物理优化的过程就是从众多路径中选择最优路径的过程。

比如要访问 STUDENT 表,向这个表写入 10000 行数据:

INSERT INTO STUDENT SELECT i, repeat('A', i%5 + 1), i%2 FROM GENERATE_SERIES(1,10000) i;
ANALYZE STUDENT;

目前已知:

  • STUDENT 表有 10000 条数据
  • STUDENT 表在 sno 上有一个主键索引

顺序扫描代价

像 STUDENT 这样的堆表,最通用的办法是把它的数据全部访问一遍,所以就可以考虑顺序扫描(SeqScan)的方式来访问这个表:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值