DB2 LUW SQL 调优指南
2010-02-04 00:00:00 来源:WEB开发网 select count(distinct c1), sum(distinct c2) from T group by c3
DB2 处理这种 SQL 时会将其转化为由 Union All 连接的多个(近似于)复制的查询(可以通过查看 db2exfmt 输出中 Optimized Statement 看到)。这意味着聚集函数的输入流(对应上面的例子就是表 T 经过 Group By 后的结果)可能被每个 Union All 的查询分支重复生成,效率会比较低。所以应该尽量避免这种 SQL。
当系统启用了 DPF(数据库多分区)并且没有开启 SMP(多处理器并行)时,可以试着启用下面的 db2set 选项:
db2set DB2_EXTENDED_OPTIMIZATION=ENHANCED_MULTIPLE_DISTINCT
然后重启 DB2。这会使 DB2 尽量共享上面说的 Union All 的各个分支的输入流。但请注意这种方法应该根据具体的情况去试,才能确定是否有效。
SQL 执行计划的优化
本章介绍如何判断并促使 DB2 使用最优的查询执行计划 (Query Execution Plan)。主要方法包括使用索引 , 改变连接的顺序和方法等。这里我们需要 db2exfmt 的输出中的查询计划树 (Plan Tree) 作为优化的基本依据,然后查看是否可以在如下方面进行优化:
1. 连接方法
DB2 优化器可以在执行连接时选择不同方法:嵌套连接,合并连接或散列连接。
嵌套连接是最常见的连接方式。嵌套连接通过下列两种方式中的一种执行:对于外表中每个被访问的记录,扫描内表;对于外表中每个被访问的记录,对内表执行索引查找。在嵌套循环中,内表被外表驱动,外表返回的每一个记录都要在内表中检索找到与它相匹配的行。因此嵌套连接适合于外表返回子集较小,整个查询返回的结果集不太大,而且在内表的连接字段上有索引的情况。
- ››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表' (数...
更多精彩
赞助商链接