暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
优化器2_实现
312
3页
4次
2020-12-09
免费下载
查询优化实现
从整个优化的角度或者范围上看,查询优化分为逻辑优化和物理优化。
逻辑优化:主要依据关系代数的等价变换做逻辑变换。如:查询重写等
物理优化(代价评估):根据数据读取,表连接方式,表连接顺序,排序等技术对查询
行优化。如:查询算法优化等
逻辑优化
如何找出
SQL
语句等价的变化形式,使得
SQL
的执行效率更高效。
优化思路包括:
(1)
子句局部优化(谓词重写,
where
条件优化等)
(2)
子句间关联优化(外连消除,子查询优化等)
(3)
局部与整体优化(
OR
并集规则变换
UNION
操作)
(4)
形式变化优化(嵌套子句消除)
(5)
语义优化
(6)
其他优化
逻辑优化的依据是关系代数和启发式规则
启发式规则
:
一定能带来优化效果的:
优先做选择和投影(连接条件在查询树上下推)
子查询的消除
嵌套连接的消除
外连的消除
连接的消除
使用等价谓词重写
语义优化
裁剪冗余,最小化查询块
查询重写规则:
范围:
SPJ
查询(
select
project
JOIN
S
对应的是限制条件(
column op(>,<,=) constant
,
优化方式选择性下推,尽量减少连接
操作前的元组个数(节约
IO
)。
P
对应的是目标的列对象,优化方式是投影操作下推,减少连接操作前的列
(
一条
组的列数减少,节约内存
)
J
对应的是连接条件,优化表的连接顺序。
等价谓词重写
:
对于一些全表扫描的谓词来说如果存在索引列可以转换相关谓词进行索引扫描,提
查询效率。
LIKE
规则
LIKE
为其他谓词更好的利用索引查询。
如:
name like ‘Abc%’
重写为
name >= ‘Abc’and name <= ‘Abd’
又如:
name like ‘abc’
重写为:
name = ‘abc’
条件化简
:
主要针对
where
having
on
条件化简。
sql
语句没有
group by
时候将
having
where
条件合并
去除冗余的括号
如:((
a and b
and
c and d
)化简为
a and b and c and d
常量传递
如:
col1 =col2 and col2=3
化简为
col1=3 and col2=3
消除死码
如:
where
0 >1 and s1 =5
)这个条件化简为恒为假
外连消除
:
由于外连过程中左右子树不能互换这种性质性质了优化器选择连接顺序时交换表连
顺序的优化方式。
左连接转内连接
全外连接转左外连接
右连接转左连接
嵌套消除
:
只有内连的嵌套查询可以去掉括号,交换表的连接顺序。
如:
select * from A join
B join C on B.b1 = C.c1
on A.a1 = B.b1 where A.a1 > 1;
转换为
select * from A join B join C on B.b1 = C.c1 on A.a1 = B.b1 where A.a1 > 1;
如果有左右连接,表的连接顺序不可以改变不能进行嵌套消除优化。
子查询优化
:
子查询可以出现的位置:
目标列(标量子查询)
FROM
子句(非相关子查询)
WHERE
子句
JOIN/ON
子句
GROUP BY
子句
ORDER BY
子句
子查询分类:
非相关子查询
相关子查询
子查询优化思路
:
子查询合并
select * from t1 where a < 10 and exists (select a2 from t2 where t2.a2 < 5 and t2.b2 =1) or
exists (select a2 from t2 where t2.a2 < 5 and t2.b2 = 2);
经过优化后,我们可以将两个子查询合并如下:
select * from t1 where a < 10 and exists (select a2 from t2 where t2.a2 < 5 and
t2.b2 =1
or t2.b2 = 2
;
子查询展开(子查询上拉)
:
of 3
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜