数据库系统-学习记录12

ch5.查询编译器

语法分析和预处理

  SQL语句的语法分析阶段,会根据文法,对输入的词语产生一个语法树

  例如,下述语言:

SELECT movieTitle
FROM Starsln
WHERE starName IN (
    SELECT name
    FROM MovieStar
    WHERE birtbdate LIKE '%1960'
);

  在进行语法分析后,会转换为下述语法树:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RLLX3VUq-1606195676980)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123171701697.png)]

  此外,如果查询语句中用到的关系是虚视图的话,则预处理器将会对语法树进行相应的替换

用于改进查询计划的代数规律

  利用这些代数规律,从而生成逻辑查询计划

交换律与结合律

  下述运算符同时满足结合律与交换律:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T7kKd10u-1606195676985)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123172544267.png)]

  而 θ \theta θ连接 ⋈ C \Join_C C则只满足交换律,不一定满足结合律

涉及选择的定律

   σ \sigma σ运算符的分解定律:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G8sO836V-1606195676987)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123172925184.png)]

  更一般地,可以任意交换 σ \sigma σ运算符的顺序:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qaCzAYKa-1606195676993)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123173029019.png)]

  其他定律:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9PJipj3f-1606195676995)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123173111311.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7WjuaQbC-1606195676997)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123173119091.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7jH8i0ui-1606195676998)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123173127110.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PqYpqqvm-1606195677000)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123173139318.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B3V5ULCN-1606195677001)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123173146146.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ObI8d1tJ-1606195677002)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123173154197.png)]

下推选择

  代数规则有时候可以反过来用

涉及投影的定律

  假定M和N是连接属性:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hOyOHioU-1606195677004)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123174423819.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5lhjWVbX-1606195677005)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123174434756.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fvJxuhSH-1606195677008)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123174443258.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0J7W8whi-1606195677010)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123174512649.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UCHZfFCm-1606195677012)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123174527732.png)]

有关连接与积的定律

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L7X8dusM-1606195677013)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123174612123.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MNRyGc44-1606195677015)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123174624909.png)]

有关消除重复的定律

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RoKO4VFj-1606195677017)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123174716554.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xQ0wF4iO-1606195677018)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123174725812.png)]

涉及分组与聚集的定律

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EKo1NGSV-1606195677020)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123174751075.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yRsJDaGT-1606195677021)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123174801535.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yl1LPfcP-1606195677023)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123174810755.png)]

从语法分析树到逻辑查询计划

转换成关系代数

  对于没有子查询的情形,可以直接将简单的select <SelList> from <FromList> where <Condition>结构转换为关系代数:
  1、将<FromList>中提及的全部关系放在最底下,由积相连接
  2、随后使用 σ c \sigma_c σc进行选择,c为<Condition>
  3、最后使用 π L \pi_L πL进行投影,L为<SelList>中的属性列表

  例如,将下图的语法树转换为关系代数:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XZmwavqR-1606195677026)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123190306831.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X6TebAmv-1606195677027)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123190344846.png)]

从条件中去除子查询

  当条件<Condition>包含子查询时,需要先将<Condition>作为一个子树,对这个子树进行转换,随后再利用转换的结果和<FromList>中的关系进行运算

  例如,将下图的语法树转换为关系代数:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y1cZ0jAB-1606195677030)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123192929570.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YR9Vrwth-1606195677032)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123193017483.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ov9tzRjQ-1606195677033)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201123193026478.png)]

逻辑查询计划的改进

  语法树转换为关系代数后,就可以开始考虑利用代数定律,重写查询计划了。重写查询计划的主要目的,就在于得到最“便宜”的物理计划。

运算代价的估计

投影运算大小的估计

  投影一般会使得关系缩小,但是用扩展投影时,有可能反而还会增大

选择运算大小的估计

  最简单的选择为:一个属性等于某个常量,即 S = σ A = c ( R ) S=\sigma_{A=c}(R) S=σA=c(R)。这种情况下,可以这样估计: T ( S ) = T ( R ) / V ( R ,   A ) T(S)=T(R)/V(R,\ A) T(S)=T(R)/V(R, A)

  而如果选择中涉及非等值比较,形如: S = σ a < 10 ( R ) S=\sigma_{a<10}(R) S=σa<10(R),则难以估计大小,一般会估计为: T ( S ) = T ( R ) / 3 T(S)=T(R)/3 T(S)=T(R)/3

  当选择中含有多个等值与非等值比较的AND时,可以使用级联: T ( R ) ∗ C T(R)*C T(R)C,其中 C C C为对于各个条件所估计的 T ( R ) ∗ A T(R)*A T(R)A中的 A A A的累乘

  而当选择中含有多个等值与非等值比较的OR时,可以使用各个条件的结果大小的简单求和。然而,这样的估计却可能是不准的

连接运算大小的估计

  根据各种假设,连接运算的大小被估计为: T ( R ⋈ S ) = T ( T(R\Join S)=T( T(RS)=T(R ) T ( S ) / max ⁡ ( V ( R ,   Y ) ,   V ( S ,   Y ) ) )T(S)/\max (V(R,\ Y),\ V(S,\ Y)) )T(S)/max(V(R, Y), V(S, Y))

多连接属性的自然连接

  如果两关系 R ( X ,   Y ) R(X,\ Y) R(X, Y) S ( Y ,   Z ) S(Y,\ Z) S(Y, Z)之间的公共属性集Y包含多个属性,则在进行大小估计时,需要在T( R R R)T(S)的基础上,分别对各个V(R, y)、V(S, y),连续除以较大者。假设Y包含{ y 1 ,   y 2 y_1,\ y_2 y1, y2},则这个估计表达式可以表示为:

T ( R ⋈ S ) = T ( R ) T ( S ) / max ⁡ ( V ( R ,   y 1 ) ,   V ( S ,   y 1 ) ) / max ⁡ ( V ( R ,   y 2 ) ,   V ( S ,   y 2 ) ) T(R\Join S)=T(R)T(S)/\max(V(R,\ y_1),\ V(S,\ y_1))/\max(V(R,\ y_2),\ V(S,\ y_2)) T(RS)=T(R)T(S)/max(V(R, y1), V(S, y1))/max(V(R, y2), V(S, y2))

多个关系的连接

  对于自然连接的一般情形 S = R 1 ⋈ R 2 ⋈ ⋯ ⋈ R n S=R_1\Join R_2\Join\cdots \Join R_n S=R1R2Rn,使用如下规则:

  从每个关系中元组数的积出发,然后,对于至少出现两次的属性除以除了V(R, A)
中最小值之外的所有值。

其他运算大小的估计

  对于其他的运算,结果大小不易确定

  并运算:采用包的并时,大小正好是参数大小之和。而集合的并则可以大至两参数大小之和,也可以小至两参数较大者,因此,取较大者和较小者的和的一半(中间值)

  交运算:因为结果可以少到0,也可以多到两参数较少者,所以其中一个方法为取两极端的平均值(较小者的一半)

  差运算:计算R-S时,结果中可能有T( R R R)至T( R R R)-T(S)个元组,因此,取平均值T( R R R)-T(S)/2

  消除重复:可以取T( R R R)/2和 Π i V i ( R ,   a i ) \Pi_i V_i(R,\ a_i) ΠiVi(R, ai)中的较小者。依据: δ ( R ) \delta(R) δ(R)有两种上限,分别为R的大小与可能存在的不同元组的最大数

  分组与聚集:可以取T( R R R)/2,因为T( R R R)可能是分组数量的上限

基于代价的计划选择介绍

大小参数估计值的获取

  DBMS可以针对V(R, A)计算给定属性的各取值的直方图

  使用直方图时,对连接的大小估计,会更加准确

统计量的计算

  在査询优化器中,统计量通常仅是周期性地加以计算

减少逻辑查询计划代价的启发式估计

  对不同的逻辑查询计划进行代价比较,选出代价最低的那一种

  关于物理计划的枚举,可以有许多方式

连接顺序的选择

  当连接以三个及以上的关系出现时,就需要考虑按什么顺序是最佳选择了。可以使用的方法包括:动态规划、贪婪算法等

物理查询计划选择的完成

  ???懵了懵了,根本看不过来,一周几十页,以后有缘再记

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值