【02】查询优化的技术范围

0、技术类型

(1)逻辑查询优化技术
A、语法级

   基于语法进行优化

B、代数级

使用形式逻辑进行优化,运用关系代数的优化

C、语义级

根据完整性约束,对查询语句进行语义理解,推知一些可优化的操作


(2)物理查询优化技术

基于代价估算模型,比较得出各种执行代价最小的。


1、查询重用

(1)定义

尽可能利用先前的执行结果,以达到节约查询计算全过程的时间并减少资源消耗的目的。

(2)查询结果的重用

 在缓存区中分配一块缓冲区,存放该SQL语句及最后的结果集,当同样SQL输入时,直接返回结果。节约查询计划生成时间,减少查询执行全过程的资源消耗。

(3)查询计划的重用

缓存一条查询语句的执行计划及其相应的语法树结构。减少了查询计划生成的时间和资源消耗。


(4)利弊

A、弊端:缓存结果集消耗很大内存,同样的SQL,不同用户的结果集也不同

B、利端:节约了CPU和IO消耗


2、查询重写规则

(1)定义

是查询语句的一种等价转换,即对于任何相关模式的任意状态都会产生相同的结果

(相同的关系替代两个表达式中相应的关系,所得的结果是相同的)


(2)目标

A、将查询转换为等价的效率更高的形式,例如将低效率的谓词转换为高效率的谓词,消除重复条件等

B、尽量将查询重写为等价、简单且不受表顺序限制的形式,为物理查询优化阶段提供更多选择,比如视图重写,子查询合并转换等

(3)依据——关系代数

A、关系代数的等价变换规则对查询重写提供了理论上的支持

B、查询重写后,查询优化器可能生成多个连接路径,可以从候选者中择优。


(4)技术

逻辑查询优化技术,基于语法级、代数级、语义级


(5)查询重写思路

A、将过程性查询转换为描述性查询,比如视图重写

B、将复杂的查询(如嵌套子查询、外连接消除、嵌套连接消除)尽可能转换为多表连接查询

C、将效率低的谓词转换为等价的效率高的谓词(比如等价谓词重写)

D、利用等式和不等式形式,简化where,having条件

E、利用启发式规则,改进查询重写规则的效率。


3、查询优化算法

(1)查询优化

查询优化是求解给定查询语句的高效执行计划的过程。该过程包含了多种子问题的求解,不同子问题,对应不同的解决方法,即算法。

(2)查询计划/查询树
A、定义

即查询树(二叉树),它是由一系列内部操作操作符组成,这些操作符按一定的运算关系构成查询的一个执行方案。

比如A先连接B,再连接C


B、构成

查询树是一颗二叉树,树叶是每个单表对象;两个树叶的父结点是一个连接操作符(如左外连接操作符,A left-out join B)连接后的中间结果(另外还有一些其他结点如排序操作等也可以作为中间结果)这个结果是一个临时“关系”,这样直至根结点。


C、单表节点

单表节点数据的获取,

可以是直接IO获取(全表扫描),

可以是通过索引获取(索引只读扫描),

可以是通过索引定位数据位置再IO获取(索引扫描);

这是一个物理存储到内存解析成逻辑字段的过程。


D、两表节点

不同的连接算法导致的连接效率不同,如数据少时可使用Hash连接,数据量大可使用嵌套连接,数据如果有序可使用归并连接或先排序后使用归并连接等。


E、多表节点

考虑多表连接顺序如何构成代价最小的执行计划。决定是AB先连接还是BC先连接,这是一个表花费大小的运算。如果太多的连接方式被判断,也会导致效率问题。

多个关系采用不同次序的连接,花费CPU资源、内存资源差异可能较大。

许多数据库采用左深树、右深树、紧密树三种方式或其中一部分对多表进行连接得到多种连接路径。


(3)生成最有效的查询计划策略
A、基于规则优化

根据经验或一些已经探知或被证明有效的方法,称之为规则。

用这些规则化简查询计划生成过程中符合可被化简的操作,使用启发式规则排除一些明显不好的存储路径。


B、基于代价的优化

根据一个代价评估模型,在生成查询计划的过程中,计算每条存取路径的花费,然后选择代价最小的作为子路径,这样直到所有表连接完毕得到一个完整的路径。

总代价=CPU代价+IO代价

主流数据库都采用了基于代价策略进行优化的技术。


查询优化器的实现,多是两种优化策略的组合。


4、并行查询优化

(1)单机:查找最小执行花费的执行计划
(2)并行:查找最小响应时间的执行计划
(3)并行查询的条件

A、资源可用(内存、CPU)

B、特定代数运算(比如每个表的单表扫描可以并行进行)

(4)类型
A、操作内并行

将同一个操作比如单表扫描操作,两表连接操作、排序操作等分解为多个独立的子操作,由不同的CPU同时执行。

B、操作间并行

一条SQL查询语句,可以分解为多个子操作,由多个CPU执行。


5、分布式查询优化

主要是数据传输策略的选择,减少通信开销。

代价估算模型:总代价=IO代价+CPU代价+通信代价



你可能感兴趣的:(【02】查询优化的技术范围)