CMU-15-445笔记(十三)

Cost Model

Statistics

DBMS将内部的一些关于table, attributes, indexs的静态信息存到内部的catalog里面,不同的系统会有不同的更新方式

Selection cardinality(选择基数)

现在假设有R种关系,对于每个都有$N_R$个tuple,$V(A,R)$代表了$A$ attribute中不同的value的数量。假设数据分布出现的均匀,代表A属性下每个值平均的记录个数。
$$SC(A,R)=N_R/V(A,R)$$

Complex Predicates

selectivity(选择率)表明table中有多少tuple符合查询的条件。每种操作都有不同的选择率的计算

Equality Predicate

$$sel(A=constant) = SC(P)/N_R$$
假设有一个age表,有0-4值,每个值出现的次数一样,那么
$$SC(age=2)=1$$
$$sel(age=2)=1/5$$

Range Predicate

$$sel(A>=a)=(A_{max}-a)/(A_{max}-A{min})$$
例如
$$sel(age>=2)\approx (4-2)/(4-0) \approx 1/2$$

这里的选择率和实际上的概率(3/5)是不等于的,有可能会导致operator拿到的数据比预估的多

Negation Query

$$sel(not P) = 1-sel(P)$$
例如
$$sel(age!=2) = 1 (1-(1/5))=4/5$$

这里selectivity = probability

Conjunction

$$sel(P1\land P2)=sel(P1) \bullet sel(P2)$$
例如
$$sel(age=2 \land name ; LIKE ‘A%‘)$$
这里假设两个概率都是独立的。

Disjunction

$$sel(P1 \vee P2) = sel(P1)+sel(P2) - sel(P1) \bullet sel(P2)$$

问题

以上的计算都是基于三个假设

  • 数据分布均匀
  • 概率独立
  • join时每个tuple都有对应的outer tuple
    现实中三种假设不一定成立,所以会出现误差。假设现在要选择车的品牌和车的型号,因为上面的概率独立假设,品牌和型号的概率是要进行相乘的,但是实际上,这两个概率并不独立,型号对应了特定的品牌,所以就会出现预测的选择率偏低的情况。

统计方式

对于不是均匀分布的数据来说,可以将每个attribute下的数据分为几个bucket,每个bucket,一种方式是每个bucket的宽度相同,但是这样对于bucket内小数据不公平

另一种方式就是让每个bucket的总和大致相同

Sampling

在高端数据库中,可以使用采样,将真实的table的分布采样成更小的副本,计算选择率之类的数据的时候直接用副本来计算。

Query Optimization

有了以上的cost的计算方式,就可以用来选取 query plan

Single Relation Query Plan

对于单一关系的查询,首先是确定访问的方式

  • 顺序查询
  • 二分/聚簇查询
  • 索引查询
    然后去判断条件的顺序,如果某个条件能去掉更多的数据,那它应该优先使用

OLTP Query Plan

首先判断这个查询是否是sargable的(Search Argument Able ),大概意思就是查询过程可以使用一个最优(选择率)的索引来辅助查询。

Multi Relation Query Plan

在System R系统中(早期系统),多重join使用的是 left deep join trees,这样可以使join后的结果可以直接通过pipelin传递,不需要中间存储来等待另一个join

对于怎么实现join,需要考虑到join的顺序,operator的种类,以及访问table的方式,可以使用dynamic programming 来减少总的耗时。
首先计算出所有的可能方式的花费,然后找一条总cost最少的路径来实现join

实现join的总综合步骤

  • 枚举realtion的顺序
    ,对于systemR来说,只考虑left outer join,所以最右两个被排除。
  • 对于每个顺序(不包括被排除的),计算每种join algorithm的cost
  • 计算每种访问table的cost

Postgers Optimizer

对于有12表join以下的,Postgers用的就是SystemR的方式,以上的用的是遗传算法。

作者

xiaomaotou31

发布于

2022-05-21

更新于

2022-05-30

许可协议

评论