WEB开发网
开发学院数据库DB2 基于DB2的数据库应用系统的性能优化 阅读

基于DB2的数据库应用系统的性能优化

 2007-05-20 16:20:06 来源:WEB开发网   
核心提示: 在这个查询中,找出报纸单价为0.5元的收订员名单,基于DB2的数据库应用系统的性能优化(4),下层查询返回一组值给上层查询,然后由上层查询块再根据下层块提供的值继续查询,并进行排序来删除重复记录,这会大大增加查询和I/O的操作次数,在这种嵌套查询中,对上层查询的每一个值OrderNo

在这个查询中,找出报纸单价为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

那么对表Order的扫描占74%,对表OrderDetail的搜索占14%。

而且,一个列的标签同时在主查询和where子句中的查询中出现,那么很可能当主查询中的列值改变之后,子查询必须重新查询一次。查询嵌套层次越多,效率越低,因此应当尽量避免子查询。如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行。

4. 通配符

在SQL语句中,LIKE关键字支持通配符匹配,但这种匹配特别耗费时间。例如:SELECT * FROM Order WHERE CreateUser LIKE ‘M_ _ _’ 。即使在CreateUser字段上建立了索引,在这种情况下也还是采用顺序扫描的方式,Order表中有1000条记录,就需要比较1000次。如果把语句改为SELECT * FROM Order WHERE CreateUser >’M’ AND CreateUser <’N’,在执行查询时就会利用索引来查询,显然会大大提高速度。

5. distinct

使用distinct是为了保证在结果集中不出现重复值,但是distinct会产生一张工作表,并进行排序来删除重复记录,这会大大增加查询和I/O的操作次数。因此应当避免使用distinct关键字。

上一页  1 2 3 4 5  下一页

Tags:基于 DB 数据库

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