CMU 15-445/645-Note7-执行篇-Optimization

0.写在前面

based on CMU 15-445/645 2020fall, Lecture #14~Lecture #15.
由于SQL语句是以声明式的方式给出要求,所以在执行的过程中有很多的优化空间。
Overview:
在这里插入图片描述
1)在第一个阶段进行SQL Rewriter(对于规则的优化),将一些常量进行累加计算等等。
2)接下来会把引用格式转换成内部的标识符,构建语法树(对应3)。(一个逻辑计划可能会对应许个物理计划)
3)最后Optimizer的作用就是选择代价最小的物理计划(基于代价的搜索)。

1:Heuristics / Rules策略
1.1 重写sql的优化 - PREDICATE PUSHDOWN

在这里插入图片描述
左右两个语法树最后产生的结果完全一致。但是效率会有很大差距。
右边先将enrolled表中grade=‘A’的tuple选出,在和student表做join操作,这会比直接join快非常多(如果enrolled中grade='A’的数量非常少)
从语法树上看我们把grade ='A’这个谓词push down,所以这种优化也叫谓词push down。

1.2 重写sql的优化 - PROJECTION PUSHDOWN

将投影规则下推到scan那一层,减少tuple的attribute。
在这里插入图片描述

1.3 谓词分解

将谓词分解成它们的最简单的形式,使其更容易让优化器移动它们。
在这里插入图片描述

1.4 表达式重写

重写那些运行中为常值的表达式。
在这里插入图片描述

1.5 忽略谓词

在这里插入图片描述

2:Cost Based 优化

Cost Based主要关注的是那些需要具体数据具体分析的优化(比如Join的顺序,scan的执行方法等)。对于Cost Based方法,其主要分为三个模块:
1)Cost Model:代价的评估策略
2)Statistics:统计信息的维护
3)Plan Enumeration:搜索最优的计划
在这里插入图片描述

2.1 SELECTION STATISTICS

假设数据分布均匀。
下图的例子是age=2:年龄为2的人在里面就占了百分之20.
在这里插入图片描述

2.2 SELECTION CARDINALITY

上述对数据的分布做出的假设是均匀分布,但实际的数据肯定为更加复杂。
维护一个直方图,来预估一个谓词会涉及到多少
如果不均匀的话,就以桶的形式使得每个高度尽可能接近。
在这里插入图片描述
在这里插入图片描述

2.3 Sampling

可以采样一个子集,然后通过部分估计总体。
在这里插入图片描述

2.4 Plan Enumeration

动态编程:如图所示,我们应该选择Cost最小的部分(黑色箭头)。
在这里插入图片描述
一条logical plan会对应许多的physical plan。
通过:
→ 枚举关系排序
→ 枚举连接算法选择
→ 列举访问方法选择
可以选择最优的策略,但是没有真正的 DBMS 这样做,其实更乱和复杂。
在这里插入图片描述
参考:
https://www.jianshu.com/p/7ae11dbec595
https://www.cnblogs.com/JayL-zxl/p/14597134.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值