MyException - 我的异常网
当前位置:我的异常网» SQL » SQL优化-查询优化技术归类

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

www.MyException.Cn  网友分享于:2015-02-08  浏览:0次
SQL优化--查询优化技术分类

数据库调优的方式通常有如下几种:
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代价 + 通信代价

文章评论

程序员必看的十大电影
程序员必看的十大电影
每天工作4小时的程序员
每天工作4小时的程序员
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
程序员和编码员之间的区别
程序员和编码员之间的区别
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
代码女神横空出世
代码女神横空出世
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
Java程序员必看电影
Java程序员必看电影
一个程序员的时间管理
一个程序员的时间管理
鲜为人知的编程真相
鲜为人知的编程真相
程序员的鄙视链
程序员的鄙视链
程序员都该阅读的书
程序员都该阅读的书
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
老程序员的下场
老程序员的下场
那些争议最大的编程观点
那些争议最大的编程观点
程序员应该关注的一些事儿
程序员应该关注的一些事儿
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
编程语言是女人
编程语言是女人
10个调试和排错的小建议
10个调试和排错的小建议
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
旅行,写作,编程
旅行,写作,编程
总结2014中国互联网十大段子
总结2014中国互联网十大段子
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
中美印日四国程序员比较
中美印日四国程序员比较
为什么程序员都是夜猫子
为什么程序员都是夜猫子
我的丈夫是个程序员
我的丈夫是个程序员
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
我是如何打败拖延症的
我是如何打败拖延症的
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
 程序员的样子
程序员的样子
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
如何成为一名黑客
如何成为一名黑客
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
漫画:程序员的工作
漫画:程序员的工作
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有