SQL优化--查询优化技术分类

n672 10年前

数据库调优的方式通常有如下几种:

1)人工调优。
主要依赖于人,效率低下;要求操作者完全理解常识所依赖的原理,还需要对应用、数据库管理系统、操作系统以及硬件有广泛而深刻的理解。
2)基于案例的调优
总结典型应用案例情况中数据库参数的推荐配置值、数据逻辑层设计等情况,从而为用户的调优工作提供一定的参考和借鉴。但这种方式忽略了系统的动态性和不同系统间存在的差异。
3)自调优。

为数据库系统建立一个模型,根据“影响数据库系统性能效率的因素”,数据库系统自动进行参数的配置。一些商业数据库,实现了部分自调优技术。


查询优化技术的分类:①查询重用、②查询重写规则、③查询算法优化、④并行查询优化、⑤分布式查询优化、⑥其他优化技术

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

主要分为以下两种类型:

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

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

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

查询优化技术类型:

a)语法级。查询语言层的优化,基于语法进行优化。

b)代数级。查询使用形式逻辑进行优化,运用关系代数的原理进行优化。

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

d)物理级。物理优化技术,基于代价估算模型,比较得出各种执行方式中代价最小的。

查询重写是基于语法级、代数级、语义级的优化,可以统一归属到逻辑优化的范畴:基于代价估算模型是物理层面的优化,是从连接路径中选择代价最小的路径的过程。

查询优化重写思路:

a)将过程性查询转换为描述性的查询,如视图重写。

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

c)将效率低的谓词转换为等价的效率高的谓词(如等价谓词重写)。

3)查询优化算法:求解给定查询语句的高效执行计划的过程。也就是查询计划,也称为查询树,它由一系列内部的操作符组成,这些操作符按一定的运算关系构成查询的一个执行方案。

生成最优查询计划的策略:

a)基于规则优化。

根据经验或一些已经探知或被证明有效的方式,定义为“规则”(如根据关系代数得知的规则、根据经验得知的规则等),用这些规则化简查询计划生成过程中符合可被化简的操作,使用启发式规则排除一些明显不好的存取路径,这就是基于规则的优化。

b)基于代价优化。

根据一个代价评估模型,在生成查询计划的过程中,计算每条存取路径(存取路径主要包括上述三个“关系结点”)的花费,然后选择代价最小的作为子路径,这样直至所有表连接完毕得到一个完整的路径。主流数据库都采用了基于规则和基于代价的技术。

4)并行查询优化:在并行数据库系统中,查询优化的目标是寻找具有最小响应时间的查询执行计划,这需要把查询工作分解为一些可以并行运行的子工作。一些商业数据库提供了并行查询的功能,用以优化查询执行操作。

在同一个SQL内,查询并行可以分为:

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

b)操作间并行。一条SQL查询语句可以分解成多个子操作,由多个CPU执行。

5)分布式查询优化:在分布式数据库系统中, 查询策略优化是查询优化的重点。主要是数据传输策略,A、B两结点的数据进行连接,是A结点数据传输到B结点或是从B到A或是先各自进行过滤然后再传输等)和局部处理优化(传统的单结点数据库的查询优化技术)。

在分布式数据库系统中,代价估算模型为:

总代价 = I/O代价 + CPU代价 + 通信代价