数据库的查询优化 Ⅱ

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]tR}:选取向量组的某些列,返回列的集合
  • 选择: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.投影剩下的属性(不包括相同的属性).
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7GQ4DM2f-1573292270606)(https://s2.ax1x.com/2019/10/25/Kw6MGD.png)]

等价变换的规则

  • 连接,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积的分配律
  • 投影和并的分配律

启发式优化

根据之前得到的经验对关系查询进行优化.

  1. 选择运算尽量先做以减少中间文件的读写.
  2. 投影和选择同时进行.避免重复扫描关系.
  3. 结合投影和前后的双目运算.
  4. 选择+DKA积->Join
  5. 找出公共子表达式.如果读取时间比计算时间小得多,则先计算一遍并储存进中间文件中.
  • 算法:优化关系表达式
  • 输入:查询树
  • 输出:优化的查询树

Example

SELECT STU.SNAME FROM STU,SC WHERE STU.SNO=SC.SNO AND SC.CNO=2
  1. 转换为查询树
  2. 对查询树优化(优化过程见上图)

查询树上的优化原则

  • 选择 σ \sigma σ沉降到叶子节点,也就是先进行操作.
  • DKA+×->join
  • … …

物理优化

目的:选区高效的操作算法和存取路径.

  1. 基于规则的启发式优化
  2. 基于代价估算(*)
  3. 结合的优化方法.

启发式优化

选择的启发式优化

  • 小关系直接调用全表扫描
  • 大关系:
    • 如果查询条件是主码,直接调用主码索引.
    • 如果是非主属性且有索引,估算查询到的元组数目<10%可以使用索引扫描.
    • 范围条件查询同上.
    • AND条件,如果有组合索引则优先采用.
    • OR采用全表扫描.

代价估算和基于此的启发式优化

总代价 = IO代价 + CPU代价
COST = P a_page_cpu_time + W T

  1. P为计划运行时访问的页面数,a_page_cpu_time是读取每个页面的时间花费,他们的乘积是IO花费;
  2. T为访问元组数,反映了CPU花费(存储层是以页面为单位,数据以页面的形式读入内存,每个页面可能有多条元组,访问元素需要解析元组的结构,才能把元组的字段读出,这消耗的是CPU),如果包含索引,则还会要加上索引读取的花费;
  3. W为权重因子,表明IO和CPU的相关性,又称为选择率。选择率表示在关系中满足条件的元组,占所有元组的比例

这一块太多太复杂了,网上的文章都很专业,不适合放在这,所以暂且留一个坑,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值