PostgreSQL执行计划:路径与代价计算
需积分: 0 61 浏览量
更新于2024-09-04
收藏 1.82MB PDF 举报
"SIX:path nacs - 本文档探讨了数据库系统中关于查询执行路径的成本计算、路径选择以及不同扫描方式的相关知识。主要涵盖了代价基准单位、Path结构、并行处理、扫描路径的种类等内容,特别关注了IO代价、CPU基准代价以及扫描路径在普通表上的应用。"
在PostgreSQL这样的关系型数据库管理系统中,优化器通过估计各个执行路径的代价来选择最佳的执行计划。本文档深入讲解了这一过程的关键方面。
6.1 成本计算
在PostgreSQL中,成本计算是基于一种相对代价模型,因为硬件性能差异很大,无法给出绝对的执行时间。代价被量化为一种虚拟的单位,通常将顺序读取一个页面的成本设为1。这允许在同一个查询的不同执行路径之间进行比较,而不受具体硬件配置的影响。
6.1.1 代价基准单位
- **基于页面的IO基准代价**:默认情况下,顺序读取一个页面的成本为1,而随机读取页面的成本为4,这是因为随机IO需要更多的寻道时间。
- **CPU基准代价**:包括基于元组、表达式以及并行查询的代价。这些代价估算涉及CPU的计算工作量。
- **缓存影响**:磁盘的缓存机制可以显著降低IO代价,因为它减少了直接访问磁盘的次数。
6.1.2 Startup和Total
代价分为启动代价(Startup)和总代价(Total)。启动代价是指执行路径开始时的一次性成本,如打开文件或初始化数据结构。总代价则考虑了整个执行过程的累积成本。
6.1.3 表达式代价的计算
对于包含复杂表达式的查询,优化器会估算执行这些表达式所需的成本。
6.2 Path
- **Path结构体**:表示查询执行的一个可能路径,包括其操作类型、所需成本以及输出列等信息。
- **并行参数**:Path可以支持并行执行,这意味着多个线程可以同时处理一部分工作,以提高查询性能。
- **参数化路径**:允许路径使用变量,使得相同的路径可以用于不同的输入值,提高了路径的复用性。
- **PathKey**:用于描述路径处理后的数据排序信息,有助于优化器选择最合适的连接顺序。
6.3 `make_one_rel`函数
这个函数在生成单个关系(表)的执行路径时起关键作用,它根据表的特性(如索引、聚集等)构建可能的扫描路径。
6.4 普通表的扫描路径
- **顺序扫描(Seqscan)**:对堆表进行逐行扫描,是最基本的扫描方式。
- **索引扫描(Indexscan)**:利用索引来直接定位数据,包括B-tree、Gin、GiST等不同类型的索引。
- **位图扫描(Bitmapscan)**:适用于多索引场景,先构建位图,然后合并位图以找到匹配的行。
- **子查询扫描(Subqueryscan)**:用于处理子查询的结果。
- **CTE扫描(Ctescan)**:处理公用表表达式(Common Table Expression)的结果。
6.4.1 顺序扫描
Seqscan适用于没有合适索引或全表扫描的场景,其代价包括读取页面的IO成本和处理每个元组的CPU成本。
这篇文章详细介绍了查询执行路径的代价估算、结构和选择,这些都是数据库优化器在生成高效执行计划时的重要依据。理解这些概念有助于提升SQL查询的性能,并优化数据库系统的整体运行效率。
2021-02-26 上传
Time-dependent approach to the double-channel dissociation of NaCs molecule induced by pulsed lasers
2019-12-28 上传
2023-02-12 上传
2023-09-15 上传
2024-09-17 上传
2024-09-17 上传
2024-09-17 上传
weixin_38651468
- 粉丝: 5
- 资源: 896
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦