Written with StackEdit.
About B+ Tree Index: https://blog.youkuaiyun.com/xlgen157387/article/details/79450295
代价及优化:See https://qiuzhenyuan.github.io/2018/02/15/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E6%9F%A5%E8%AF%A2%E4%BC%98%E5%8C%96-%E5%9F%BA%E6%9C%AC%E5%8E%9F%E7%90%86/
代数优化
关系代数的等价变换
关系代数 Review
See: https://blog.youkuaiyun.com/mingxuanyun/article/details/12904727
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8fE8pMx5-1573292270605)(https://s2.ax1x.com/2019/10/25/KwjBqI.png)]
- 并,差,交
- DKA积
- 投影: Π A ( R ) = { t [ A ] ∣ t ∈ R } \Pi A(R)=\{t[A]|t\in R\} ΠA(R)={t[A]∣t∈R}:选取向量组的某些列,返回列的集合
- 选择:KaTeX parse error: Undefined control sequence: \and at position 23: …F(R)=\{t|t\in R\̲a̲n̲d̲ ̲F(t)=TRUE\}:选取满足 F ( x ) F(x) F(x)的向量集合.
- 连接(join):
R > < c o n d i t i o n S = i f C o n d i t i o n m e e t s T h e n C o n n e c t R{><}_{condition} S=\\if\ Condition\ meets\\Then\\Connect R><conditionS=if Condition meetsThenConnect
DKA积是无条件的join.- 等值连接: c o n d i t i o n condition condition为 = = =时的连接运算称为等值运算,它是从R和S中选取R中的A属性组上的元组等于S中B属性组上的元组。
- 自然连接:自然连接用R连接R ⋈ S表示,是一种特殊的等值连接,一般使用在R和S中有公共属性的情况中.对于两个关系中有公共属性,当公共属性完全相等时,连接两个向量.
- 除法:要求两表之间有相同属性.R÷S1表示:1.选取共同向量等于S1向量的向量集.2.投影剩下的属性(不包括相同的属性).
等价变换的规则
- 连接,DKA积的交换律/结合律
- 投影的串接: π A 1 , A 2 , . . . ( Π B 1 , B 2 , . . . ( E ) ≡ Π A 1 , A 2 , . . . A n ( E ) \pi_{A1,A2,...}(\Pi_{B1,B2,...}(E)\equiv \Pi _{A1,A2,...An}(E) πA1,A2,...(ΠB1,B2,...(E)≡ΠA1,A2,...An(E):属性嵌套选取只关注最外一层.
- 选择的串接:KaTeX parse error: Undefined control sequence: \and at position 44: …equiv\Sigma_{F1\̲a̲n̲d̲ ̲F2}(E):选择向量的条件是嵌套的.
- 投影和选择的交换律:对于同一个关系,选择和投影的顺序不固定.
- 选择和DKA的交换律.//这两个可以大幅度降低连接的开销.
- 选择和并的分配律
- 选择和差的分配律
- 选择和自然连接的分配律
- 投影和DKA积的分配律
- 投影和并的分配律
启发式优化
根据之前得到的经验对关系查询进行优化.
- 选择运算尽量先做以减少中间文件的读写.
- 投影和选择同时进行.避免重复扫描关系.
- 结合投影和前后的双目运算.
- 选择+DKA积->Join
- 找出公共子表达式.如果读取时间比计算时间小得多,则先计算一遍并储存进中间文件中.
- 算法:优化关系表达式
- 输入:查询树
- 输出:优化的查询树
Example
SELECT STU.SNAME FROM STU,SC WHERE STU.SNO=SC.SNO AND SC.CNO=2
- 转换为查询树
- 对查询树优化(优化过程见上图)
查询树上的优化原则
- 选择 σ \sigma σ沉降到叶子节点,也就是先进行操作.
- DKA+×->join
- … …
物理优化
目的:选区高效的操作算法和存取路径.
- 基于规则的启发式优化
- 基于代价估算(*)
- 结合的优化方法.
启发式优化
选择的启发式优化
- 小关系直接调用全表扫描
- 大关系:
- 如果查询条件是主码,直接调用主码索引.
- 如果是非主属性且有索引,估算查询到的元组数目<10%可以使用索引扫描.
- 范围条件查询同上.
- AND条件,如果有组合索引则优先采用.
- OR采用全表扫描.
代价估算和基于此的启发式优化
总代价 = IO代价 + CPU代价
COST = P a_page_cpu_time + W T
- P为计划运行时访问的页面数,a_page_cpu_time是读取每个页面的时间花费,他们的乘积是IO花费;
- T为访问元组数,反映了CPU花费(存储层是以页面为单位,数据以页面的形式读入内存,每个页面可能有多条元组,访问元素需要解析元组的结构,才能把元组的字段读出,这消耗的是CPU),如果包含索引,则还会要加上索引读取的花费;
- W为权重因子,表明IO和CPU的相关性,又称为选择率。选择率表示在关系中满足条件的元组,占所有元组的比例
这一块太多太复杂了,网上的文章都很专业,不适合放在这,所以暂且留一个坑,