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

DB2 LUW SQL 调优指南

 2010-02-04 00:00:00 来源:WEB开发网   
核心提示: db2setDB2_SELECTIVITY=ALL然后重启 DB2, 就可以执行类似这样的 SQL 语句:select*fromT1,T2whereT1.c1=1selectivity0.000001andT1.c2=T2.c2"selectivity 0.000001"指定

db2set DB2_SELECTIVITY=ALL 

然后重启 DB2, 就可以执行类似这样的 SQL 语句:

 select * from T1, T2 where T1.c1 = 1 selectivity 0.000001and T1.c2 = T2.c2 

"selectivity 0.000001"指定了 T1.c1 = 1 的 Selecitivity 是百万分之一。

手动修改统计信息,如果怀疑是优化器对代价的估算的不准确导致较差的计划,作为一种调试的手段,可以手动修改统计信息以期得到好的查询计划。例如下面的命令可以改变表 T 的记录数统计信息:

 update sysstat.tables set card=10000 where tabschema ='SCHEMA' and tabname ='T'; 

5. 使用 Informational Constraint

Informational Constraint 是一种特殊的约束,专门用于优化查询。在开发应用程序时,有些数据的完整性约束,比如唯一性,值的合法性,参照完整性,被设计成由应用程序来保证,但 DB2 的优化器并不知道这些约束,无法根据它们做优化。这时可以在 Create Table 或 Alter Table 时定义 Informational Constraint 来告诉优化器这些约束。例如:

 create table T (c1 int, c2 int, foreign key(c2) references T2not enforced) 

关键字"not enforced"表明此外键约束是 Informational Constraint,只起到优化的作用,不会由 DB2 保证约束。

特殊的优化方法

本章主要介绍上述两个章节之外的特殊的 SQL 优化方法。

1.  使用物化查询表(MQT)

MQT 是一种以查询结果为基础定义的表 , 可以用所有可以被正确执行的语句来创建,还可以在其上如同一个真实的表一样创建索引。我们可以将 MQT 看作一种物化的视图,它将查询结果保存下来。在查询过程中,优化器会试着将查询语句的一部分或全部与 MQT 的定义匹配,如果匹配上,就有可能用 MQT 代替那部分查询。这样就可以节省优化器制定新的计划和扫描真实表的代价,甚至可以使用 MQT 上的索引,从而提高了复杂查询的效率。对存在数据分组和聚合操作 (Aggregation, 如 SUM,AVG)的查询,使用 MQT 尤其有用。

上一页  5 6 7 8 9 10 

Tags:DB LUW SQL

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