开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第34天
一、本篇笔记重点内容:
- 查询优化的基础
- 影响查询处理效率的因素
- 查询重写
二、 详细知识点介绍:
查询优化的基础
优化目标
优化就是寻找执行代价(费用和时间)最小的查询执行策略,使系统执行效率降到最低。优化的目标就是指局部执行代价和网络传输代价的和最小。
- 局部执行代价:主要指输入/输出次数(I/O代价)及CPU处理代价。
- 网络传输代价:主要指传输启动代价和数据传输代价。
优化内容
- 执行运算的次序。
- 执行每种运算的方法。如上例,不同方法代价不同。
- 所访问的副本场地。如:选择就近的场地,节约传输代价。
- 执行运算的场地的选择,使总的传输代价或总代价最低。 综合考虑,确定出一种执行代价最小的查询执行策略。
等价变换
- 重复律:UR ≡ UUR
- 交换律:U1U2R ≡ U2U1R
- 分配律:U(RbS)≡(UR)b(US)
- 结合律:Rb1(Sb2T)≡ (Rb1S)b2T
- 提取律:(UR)b(US) ≡ U(RbS)
- 其中:R、S、T为关系,U1、U2、U为一元运算符 ,b1、b2、b为二元运算符。
影响查询处理效率的因素有:
网络传输代价(数据量和延迟等)、局部I/O代价及CPU处理代价等,但主要由网络通信代价和局部I/O代价来衡量。不同的分布式数据库系统可能对评估查询处理的传输代价和I/O代价的侧重不同。 为提高查询的效率,在查询处理过程中还要进行优化处理。 查询优化就是确定出一种执行代价最小的查询执行策略或寻找相对较优的操作执行步骤。一般采用多级优化的策略。本章介绍全局查询的处理与优化。
查询处理的目标
两方面: 转换( transformation)和优化(optimization)
- 考虑的优化代价:
- CPU time
- I/O time
- Communication time
在WAN内,侧重通信代价
在LAN内,三者同等重要
优化类型
- 穷举法(Exhaustive search)– workable for small solution space.
- 启发式(Heuristics) – , perform first, semijoin, etc. for large solution space.
优化时机
- 静态的(Static) – 在编译时进行优化,基于统计信息进行穷举优化,优化一次,执行多次
- 动态的(Dynamic) – 在执行中优化,准确性好,但每次执行都进行优化,代价高
查询重写
- 直接将关系演算转换为关系代数;
- 重写关系代数查询以提高性能。
- 通常使用操作树来表示关系代数查询。 关系代数树定义为:
- 根节点表示查询结果
- 叶子节点表示关系;
- 非叶子节点表示中间结果关系
- 叶子到根的边表示序列操作.
SELECT SNAME
FROM SUPPLIER S,SUPPLY SP,PART P
WHERE S.SNO=SP.SNO
AND SP.PNO=P.PNO
AND P.PNAME=“BOLT”
AND S.AREA=“北方”
AND SP.QTY>5000;