PostgreSQL技术内幕 读书简记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lifestxx/article/details/84973838

数据库的架构,本书是查询优化模块 src/backend/optimizer

查询优化的优势(优化器对人):

信息不对称(内部更多:统计数据)

时效性(数据时刻在变,查询计划不是恒定的)

算力不同(人弱爆了)

查询优化分两个层次:基于规则的(RBO);基于代价的(CBO)

逻辑优化:等价变换;

物理优化:变成最优的查询执行器的语言

逻辑优化的可能性:

例子:笛卡尔积的带条件的查询

可以变为:条件下推到表的笛卡尔乘积。

关系表达式计算量降低:需要保存的中间结果减少,从而减少CPU与IO消耗。

可以从水平和垂直方向上尽早缩小笛卡尔积的中间结果:

尽量将选择操作下推到下层节点来做;

尽量在叶子节点使用投影缩小中间结果。

但:很多情况下简单处理会导致不等价!!

物理优化的可能性:

单个表有多个查询路径(全表扫,索引,快速索引,跳表等);多个表的连接顺序;多个连接路径。

工具:

B+树;Hash表;排序;物化

如此多的路径,如何搜索最优?

1 少的话就动态规划寻最优;

2 多的话用启发算法如遗传算法。

源码结构如上图。

plan总调度。prep预处理。path寻最优路径。

猜你喜欢

转载自blog.csdn.net/lifestxx/article/details/84973838