深入说明DB2数据库运用体系的功用优化2

 

假定待排序的列有多个,可以在这些列上创建复合索引(compound index),即索引由多个字段复合而成。

◆查询优化

目下当今的数据库产物在体系查询优化方面曾经做得越来越好,但因为用户提交的SQL语句是体系优化的根基,很难想象一个原来蹩脚的查询筹算经由体系的优化之后会变得高效,是以用户所写语句的利害至关紧张。下面重点说明改善用户查询筹算的办理方案。

1.排序

在良多时辰,该当简化或休止对大型表停止反复的排序。当可以运用索引主动以恰当的次序递次产生输入时,可以休止排序的步调,当以下的情形产生时,排序就不克不及省略:

索引中不包罗一个或几个待排序的列;

group by或order by子句中列的次序递次与索引的次序递次纷例如样;

排序的列来自差其余表。

为了休止不需要的排序,就要正确地增建索引,合理地合并数据库表,虽然无意能够影响表的规范化,但相搪塞听命的提高是值得的。假定排序不行休止,那么该当试图简化它,如裁汰排序列的范围等。
2.主键

主键用整型会极大的提高查询听命,而字符型的斗劲开支要比整型的斗劲开支大良多,用字符型数据作主键会使数据拔出、更新与查询的听命低落。数据量小的时辰这点低落能够不会被注重,可是当数据量大的时辰,小的改造也可以提高体系的相应速度。

3.嵌套查询

在SQL言语中,一个查询块可以作为另一个查询块中谓词的一个操纵数。是以,SQL查询可以层层嵌套。例如在一个大型散布式数据库体系中,有订单表Order、订单信息表OrderDetail,假定需求两表联络关系查询:

SELECT CreateUser
FROM Order
WHERE OrderNo IN
( SELECT OrderNo
FROM OrderDetail
WHERE Price=0.5)
 
 
在这个查询中,找出报纸单价为0.5元的收订员名单。上层查询前去一组值给上层查询,然后由上层查询块再根据上层块供给的值持续查询。在这种嵌套查询中,对上层查询的每一个值OrderNo,上层查询都要对表OrderDetail停止一切扫描,实施听命显然不会高。在该查询中,有2层嵌套,假定每层都查询1000行,那么这个查询就要查询100万行数据。在体系开支中,对表Order的扫描占82%,对表OrderDetail的搜刮占16%。假定我们用连接来改换,即:

SELECT CreateUser
FROM Order,OrderDetail
WHERE Order.OrderNo=OrderDetail.OrderNo AND Praice=0.5
 
 
来自: 新客网(www.xker.com) 详文参考:http://www.xker.com/page/e2008/0128/46640_2.html


版权声明: 原创作品,许可转载,转载时请务必以超链接情势标明文章 原始出处 、作者信息和本声明。否则将追究执法责任。

原文地址:https://www.cnblogs.com/zgqjymx/p/1975425.html