WEB开发网
开发学院数据库DB2 DB2数据库应用系统性能优化深入探究 阅读

DB2数据库应用系统性能优化深入探究

 2008-08-27 16:26:17 来源:WEB开发网   
核心提示: 索引中不包括一个或几个待排序的列; group by或order by子句中列的次序与索引的次序不一样; 排序的列来自不同的表,为了避免不必要的排序,DB2数据库应用系统性能优化深入探究(3),就要正确地增建索引,合理地合并数据库表,对表Order的扫描占82%,对表OrderDetail

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

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

上一页  1 2 3 4  下一页

Tags:DB 数据库 应用系统

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接