WEB开发网
开发学院数据库DB2 DB2 LUW SQL 调优指南 阅读

DB2 LUW SQL 调优指南

 2010-02-04 00:00:00 来源:WEB开发网   
核心提示: 在 Optimized Statement 中应该看到选择谓词 c1 between 2000 and 2009 被下推到 Union All 里面变成:select*from(select*fromT1wherec1between2000and2009unionallselect*fromT2

在 Optimized Statement 中应该看到选择谓词 c1 between 2000 and 2009 被下推到 Union All 里面变成:

 select * from (select * from T1 where c1 between 2000 and 2009 union all 
 select * from T2 where c1 between 2000 and 2009) as V1 

如果没有下推,可能是由于选择谓词过于复杂,也可能是 DB2 的查询重写器无法判定下推谓词是否会提高效率。这时候如果确信下推后会产生较好的计划,可以手动改变 SQL 的书写形式。还可以试试适当提高优化级别,可能会使原来没有下推的谓词被下推。

5. 子查询

检查子查询的使用是否合理。在 SQL 语言中,当一个查询语句嵌套在另一个查询的查询条件中时,称为子查询。如果一个列同时出现在外部查询和 Where 子句中,很可能当外部查询中的列值改变之后,子查询必须重新查询一次。查询嵌套的层次越多,效率越低,因此应当尽量避免子查询。如果子查询不可避免,那么首先要在子查询中过滤掉尽可能多的行,其次考虑将子查询转换成连接。子查询转换为连接后,可以使 DB2 有机会考虑更多的连接方法和连接顺序,甚至使索引得以利用,从而生成更优的计划。特别是 Exist 和 IN 子句,可以方便的转换成连接。例如,

 select * from T1 where exists(select * from T2 where T1.c1 = T2.c1) 

可以转换为,

 select distinct T2.c1, T1.* from T1, T2 where T1.c1 = T2.c1 

注意:除非 T2.c1 有唯一性(unique),否则关键词 distinct 是必须的,这是为了保证最终结果和原来的 SQL 一致。

6. Fetch First N Rows Only 的使用

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:DB LUW SQL

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