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

DB2 LUW SQL 调优指南

 2010-02-04 00:00:00 来源:WEB开发网   
核心提示: selectcount(distinctc1),sum(distinctc2)fromTgroupbyc3DB2 处理这种 SQL 时会将其转化为由 Union All 连接的多个(近似于)复制的查询(可以通过查看 db2exfmt 输出中 Optimized Statement 看到),这意味

 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 优化器可以在执行连接时选择不同方法:嵌套连接,合并连接或散列连接。

嵌套连接是最常见的连接方式。嵌套连接通过下列两种方式中的一种执行:对于外表中每个被访问的记录,扫描内表;对于外表中每个被访问的记录,对内表执行索引查找。在嵌套循环中,内表被外表驱动,外表返回的每一个记录都要在内表中检索找到与它相匹配的行。因此嵌套连接适合于外表返回子集较小,整个查询返回的结果集不太大,而且在内表的连接字段上有索引的情况。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:DB LUW SQL

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