数据库系统
查询优化技术
基本概念
语义优化:利用模型的语义及完整性规则,优化查询(相同意义的不同sql表达)
语法优化:利用语法结构,优化操作的执行顺序(逻辑层优化)
执行优化:存取路径和执行算法的选择和执行次序优化(物理层优化)
总体思路
语义优化:内容等价性
如去掉无关表,去掉无关属性
语法优化:语法等价性
改变次序,尽可能早做选择,投影运算同时保证等价性
执行优化:物理等价性
选择不同的算法实现,保证结果等价
关系代数操作次序优化->代价估算->算法选择与装配次序
逻辑层优化基本策略
语法树:关系代数表达式的执行次序表达
尽可能早做选择和投影
有选择投影一元操作串起来
把投影和前或后的二元运算结合
把选择和乘积合并成连接
...
一棵未优化的语法树->优化后的语法树
等价性变换定理
- 连接与连接,积与积的交换律:小数据集全部载入内存
- 连接与连接,积和积的结合律:小数据集全部载入内存
- 投影串接律:两遍扫描变一遍
- 选择串接律:两遍扫描变一遍
- 选择和投影的交换律:方便尽可能早做投影选择
- 选择和积的交换律:减少乘积操作,优化关键
- 投影和积的交换律:减少每条记录的长度,提高效率
- 选择和并的交换律:减少中间结果
- 选择和差的交换律:减少中间结果
- 投影和并的交换律:减少中间结果
基于关系代数的查询优化算法
输入:关系代数语法树
输出:计算该表达式的程序
算法:
(S1)依据定理L4,把选择拆开
(S2)对每个选择,依据定理L4至L9,尽可能把它移至树的底部。
(S3)对每个投影,依据定理L3,L7,L10和L5,尽可能把它移至树的底部。如
果一个投影是对某表达式所有属性进行的,则去掉之。
(S4)依据定理L4至L5把串接的选择和投影组合为单个选择、单个投影,或者
一选择后跟一个投影。
(S5)对修改后的语法树,将其内结点按以下方式分组:
每个二元运算结点(积、并、差、连接等)和其所有一元运算直接祖先结点放在
一组;对于其后代结点,若后代结点是一串一元运算且以树叶为终点,则将这
些一元运算结点放在该组中;若该二元运算结点是笛卡儿积,且其后代结点不
能和它组合成等连接,则不能将后代结点归入该组。
(S6)产生一个程序:它以每组结点为一步,但后代组先执行
物理层查询优化
相同目标的不同算法实现:一趟、两趟、索引、散列、排序等
衡量指标:IO次数,cpu代价、内存代价等
数据库的统计信息:存放在数据字典中或系统目录中,方便DBMS选择合适物理执行
更新统计信息:需要DBA手动更新,相应的命令
代价估算
统计信息:
T R 或T(R):关系R的元组数目;
B R 或B(R) :关系R的磁盘块数目;
I R 或I(R) :关系R的每个元组的字节数;
f R 或f(R) : R的块因子 , 即一块能够存储的R的元组数目
V(R, A): R中属性A出现不同值的数目,即A (R) 的数目.
SC(R, A): R中属性A的选择基数,满足A上等值条件的平均记录数
估计投影:
T:不变,行数不变
B:变小,每条记录变短,节省了磁盘块
选择运算:
相等:T(R)/V(R,A),不知道V时取10
小于:T(R)/3
串接条件:分母相乘
或者:估计都不满足的概率
连接:
TR*TS*1/max(V(R,Y),V(S,Y))