DB2 LUW SQL 调优指南
2010-02-04 00:00:00 来源:WEB开发网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 尤其有用。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接