基于DB2的数据库应用系统的性能优化
2007-05-20 16:20:06 来源:WEB开发网核心提示: ●如果待排序的列有多个,可以在这些列上建立复合索引(compound index),基于DB2的数据库应用系统的性能优化(3),即索引由多个字段复合而成,查询优化现在的数据库产品在系统查询优化方面已经做得越来越好,SQL查询可以层层嵌套,例如在一个大型分布式数据库系统中,但由于用户提交的S
●如果待排序的列有多个,可以在这些列上建立复合索引(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)
更多精彩
赞助商链接