DB2 LUW SQL 调优指南
2010-02-04 00:00:00 来源:WEB开发网4. 统计信息
最优的连接方法和顺序要靠优化器根据统计信息和代价模型得出,所以要确保统计信息的完整性和准确性。从实践中看,很大一部分性能问题是统计信息不准确或代价估算不精确导致的。检查有性能问题的 SQL 的查询计划,要查看统计信息是否准确,中间结果的大小的估算是否符合实际情况。从 db2exfmt 中计划树的叶子节点,可以看到每个表的记录数的信息。注意如果记录数是 1000,可能是统计信息没有收集,因为在没有收集统计信息的情况下,记录数为缺省值 1000。从计划树的中间节点可以看到中间结果大小的估算值。如果这些值偏小(比如远小于 1),就说明估值不准确。这通常是由于对选择和连接谓词的选择性(Selectivity)的计算不精确造成的。解决这个问题需要收集表上和相关列上的更多的统计信息。例如,用下面的命令可以收集表上每个列的值的分布信息和索引的键值信息,以及 (c1,c2) 两个列相关的多维分布信息(用于同时在这两个列上都有谓词的查询)。
runstats on table Schema.T on all columns and columns((c1, c2)) with distribution and
detailed indexes all
如果收集详细的统计信息仍然不能解决中间结果估值不准的问题,还可以使用下面的技术:
使用 Statistical View,比如利用下面的 Statistical View 可以精确的让优化器知道 T1, T2 连接后的中间结果和值的分布情况
create view V as (select T1.* from T1, T2 where T1.c1 = T2.c1)
alter view V enable query optimization
runstats on table schema.V with distribution
使用 Selectivity,就是直接指定选择谓词的选择性,这对于使用用户自定义函数的情况尤其有用。要指定 Selectivity 首先需要运行 db2set 命令:
- ››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表' (数...
更多精彩
赞助商链接