第7章-查询优化(金培权课程)

语法分析

构造语法分析树

SQL查询语法分析

在这里插入图片描述
在这里插入图片描述

初始逻辑查询计划生成

  1. 关系代数
    在这里插入图片描述
  2. 关系代数与SQL语句的转化
    在这里插入图片描述

查询重写

初始逻辑查询计划->优化的逻辑查询计划
在这里插入图片描述

转换规则

R × S = S × R R×S=S×R R×S=S×R; ( R × S ) × T = R × ( S × T ) (R×S)×T=R×(S×T) (R×S)×T=R×(S×T);
R ⋈ S = S ⋈ R R\Join S=S\Join R RS=SR; ( R ⋈ S ) ⋈ T = R ⋈ ( S ⋈ T ) (R\Join S)\Join T= R\Join (S\Join T) (RS)T=R(ST)
R ∪ S = S ∪ R R\cup S= S\cup R RS=SR; ( R ∪ S ) ∪ T = R ∪ ( S ∪ T ) (R\cup S)\cup T=R\cup (S\cup T) (RS)T=R(ST)
R ∩ S = S ∩ R R\cap S= S\cap R RS=SR; ( R ∩ S ) ∩ T = R ∩ ( S ∩ T ) (R\cap S)\cap T=R\cap (S\cap T) (RS)T=R(ST)
σ c 1 ∧ c 2 ( R ) = σ c 1 ( σ c 2 ( R ) ) \sigma_{c1\land c2}(R)=\sigma_{c1}(\sigma_{c2}(R)) σc1c2(R)=σc1(σc2(R))
σ c 1 ∨ c 2 ( R ) = σ c 1 ( R ) ∪ s σ c 2 ( R ) \sigma_{c1\lor c2}(R)=\sigma_{c1}(R)\cup_s \sigma_{c2}(R) σc1c2(R)=σc1(R)sσc2(R)
σ p ( R ⋈ S ) = σ p ( R ) ⋈ S \sigma_{p}(R\Join S)=\sigma_p(R)\Join S σp(RS)=σp(R)S; σ p ( R ⋈ S ) = R ⋈ σ p ( S ) \sigma_{p}(R\Join S)=R\Join \sigma_p(S) σp(RS)=Rσp(S);
σ p ∧ q ( R ⋈ S ) = σ p ( R ) ⋈ σ q ( S ) \sigma_{p\land q}(R\Join S)=\sigma_p(R)\Join \sigma_q(S) σpq(RS)=σp(R)σq(S)
σ p ∧ q ∧ t ( R ⋈ S ) = σ p ( σ q ( R ) ⋈ σ t ( S ) ) \sigma_{p\land q\land t}(R\Join S)=\sigma_p(\sigma_q(R)\Join \sigma_t(S)) σpqt(RS)=σp(σq(R)σt(S))
σ p ∨ q ( R ⋈ S ) = σ p ( R ⋈ S ) ∪ σ q ( R ⋈ S ) \sigma_{p\lor q}(R\Join S)=\sigma_p(R\Join S)\cup \sigma_q(R\Join S) σpq(RS)=σp(RS)σq(RS)
π x y ( R ⋈ S ) = π x y ( π x z ( R ) ⋈ π y z ( S ) ) \pi_{xy}(R\Join S)=\pi_{xy}(\pi_{xz}(R)\Join\pi_{yz}(S)) πxy(RS)=πxy(πxz(R)πyz(S))
注意对于不同顺序的 ⋈ \Join 他们导致的中间代价不同
在这里插入图片描述
SQL中的Union All和Union的区别:Union All不去重不排序,Union去重且排序

查询代价估计

中间结果的大小估计

  1. 统计量
    T®:R的元组个数
    S®:R的每个元组大小(bytes)
    V(R,A):R的属性A的不同取值个数
    B®:容纳R的所有元组所需的块数
    在这里插入图片描述
T(W)S(W)
W=R1×R2T(R1)*T(R2)S(R1)+S(R2)
W= σ A = a ( R ) \sigma_{A=a}(R) σA=a(R) T ( R ) / V ( R , a ) T (R)/V(R,a) T(R)/V(R,a) S ( R ) S(R) S(R)
W= σ z > v a l ( R ) \sigma_{z>val}(R) σz>val(R) T ( R ) / 2 T (R)/2 T(R)/2或者通过取值范围进行估计 S ( R ) S(R) S(R)
W= σ z ! = v a l ( R ) \sigma_{z!=val}(R) σz!=val(R) T ( R ) ( 1 − 1 / V ( R , z ) ) T (R)(1-1/V(R,z)) T(R)(11/V(R,z)) S ( R ) S(R) S(R)
W = R ⋈ S W=R\Join S W=RS(R与S的共同属性为A) T ( R ) ∗ T ( S ) / m a x ( V ( R , A ) , V ( S , A ) ) T(R)*T(S)/max(V(R,A), V(S,A)) T(R)T(S)/max(V(R,A),V(S,A)) S ( R ) + S ( S ) − S ( A ) S(R)+S(S)-S(A) S(R)+S(S)S(A)

且对于最后一种情况,V(W,A)=min(V(R,A), V(S,A))

IO代价估计

  1. 估计目标:执行查询计划所必须读写的磁盘块数目
  2. 还需要的参数:

B ( R ) B(R) B(R):R所需要的的块数
f®:每块可容纳的R的最大元组数
M:可用的内存块数
HT(i):索引i的层数
LB(i):索引i的叶结点所需的块数

  1. 影响查询计划IO代价的因素
    1)实现查询计划的逻辑操作符
    2)中间结果的大小
    3)实现逻辑操作符的物理操作符(索引连接/散列连接)
    4)相似操作的顺序(多关系的连接顺序)
    5)物理操作符之间的参数传递方式

物化方式:操作以此执行,每个操作的中间关系都写到磁盘上供其他操作存取
流水线:多个操作同时进行,一个操作产生的元组直接

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值