DB2 LUW SQL 调优指南
2010-02-04 00:00:00 来源:WEB开发网 T1 => T2 => T3
那么有可能 T1,T2 连接后的结果的记录数是 1000000,再和 T3 连接效率就很低。如果按下面的顺序连接,
T1 => T3 =>T2
T1, T3 连接后只有 1000 个记录,再和 T2 连接效率就提高很多。对于连接顺序,需要仔细观察计划树,看其中是否有生成较多的中间结果的连接以及这些连接是否含有不当的连接顺序。出现了不好的连接顺序的原因一般是由于优化器对中间结果的估算不准确引起的,这时候需要利用章节 4.4 中的方法改善统计信息和估算值。
3. 索引的设计
要得到高效的执行计划,索引的使用必不可少。创建索引时,列名的序列要考虑谓词的使用。除了选择谓词,连接谓词也要一并考虑。如对于下面的查询,
select * from T1, T2 where T1.c1 = T2.c1 and T1.c2 = 1 and T1.c3 IN ('a','b','c')
我们可以在 T2 上创建索引。有三个 T2 的列出现在谓词里面,c1, c2, c3,应当在这三个列上建索引。考虑列的序列时,出现在等式谓词中的列应放在前面,因为它们可以用来在索引中直接定位对应的记录。其中,选择谓词应放在最前面,连接谓词放在其后,因为选择谓词所限定的列值在索引扫描的过程中是不变的,连接谓词是不断变化的,把选择谓词放在前面有助于减少访问磁盘的随机性。最后将非等式谓词的列放在后面,也就是按(c2, c1, c3) 的顺序创建索引。
另外,使用 Index Only 是一个行之有效的优化方法。当查询中只用到表的少数几个列,并且这个表被多次连接或者表的记录特别多,就可以考虑使用 Index Only。所谓 Index Only 就是对一个表创建索引,包含查询中的所涉及的所有的表列,并保证这个 Index 被用在查询计划中。Index Only 一方面避免了对主表的访问,减少了 I/O 访问次数,另一方面使 DB2 只处理较少的只含有相关列的页面,也减少了 CPU 代价。
- ››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表' (数...
更多精彩
赞助商链接