涉及DB2中的会话表的选择查询执行缓慢

时间:2014-08-12 03:35:41

标签: sql database db2

我在DB2中使用java创建了临时表,然后插入了相同的2000行。 现在我在一个只有少量连接的选择查询中使用此表。该查询涉及其他3个表,如A,B和C.不知何故,这个选择查询返回结果非常慢,几乎需要20秒才能提供结果。

以下是此查询的详细信息

  1. 表A有200000条记录。 B和C只有100-200条记录。
  2. 所有这3个表都在join和where子句中涉及的列上定义了足够的索引。解释计划工具等没有显示任何需要的新索引。
  3. 当我运行查询删除会话表及其在where子句中的使用时,查询以毫秒为单位返回结果。正如我所提到的,这个会话表只有大约2000条记录。
  4. 我还在此会话表的每一列上声明了索引。
  5. 我不太确定这里的术语,但是当我说会话表时,它是使用数据库连接创建的临时表,并且在关闭数据库连接时表将被删除。此外,当程序运行15个线程时,没有线程能够查看由其他线程创建的表。
  6. 问题出在哪里?请在这里告诉我一些建议。

1 个答案:

答案 0 :(得分:0)

一些建议(我假设LUW,因为你没有提到平台)

a)你说你的会话表的每一列都有索引,我认为这意味着一组1列索引。在大多数情况下,这可能不是最佳的,您可以用复合索引替换它们。通过创建一个真实的表来检查顾问建议:

创建表temp.t(...)    插入temp.t(...)值(...)    temp.t上的runstats分发

然后运行:db2advis -d -m I -s"您的查询但是使用temp.t而不是会话表"

b)加载数据后 - 最终 - 创建新索引,在会话表上执行runstats