PostgreSQL查询代价估算(一)

来源:互联网 发布:网络英雄洛克人第三部 编辑:程序博客网 时间:2024/06/15 09:55

PostgreSQL查询优化代价估算基于CPU开销和IO开销,计算公式为:

总代价 =启动代价 + I/O代价 + CPU代价

COST = S + P + W * T

1.        P为计划运行的时访问的页数,反映了I/O花费

2.        T为访问的元组数,反映了CPU花费(存储层是以页面为单位,数据以页面的形式被读入内存,每个页面上可能有多条元组,访问元组,需要解析元组结构,才能把元组上的字段读出,这消耗的是CPU

3.        W为权重因子,表明I/OCPU的相关性,又称为选择率(selectivity)。在System-R算法中,每个可能的选择率固化在代价估计的代码中,而在数据字典中存储代价公式和需要的统计信息。而PostgreSQL选择率的处理较为特殊,每个选择率公式使用一个参数化的过程(函数)来表达,选择率计算通过将限制条件中的关系、属性、常量信息和索引标识符以及索引键数目等参数传递给相应的过程来计算。

 

其中磁盘I/O受以下因素影响:

1)       所选取用于实现查询的特定的逻辑操作符;

2)       中间关系的大小;

3)       用于实现逻辑操作符的物理操作符;

4)       相似操作的排序,例如连接顺序的选择;

5)       物理操作符之间的参数传递。

 

代价估算,是估算某个路径的花费,属于物理优化范畴。路径可以是单表的路径,也可以是两个关系连接得到的路径,还可以是多个表根据不同的连接方式(左深树、紧密树等)得到的连接路径。所以如下按照单表扫描、两表连接这样的分类展开。

0 0