我是做开发的,现在遇到个SQL,执行的比较慢 ,SQL语句如下图显示
这个SQL所涉及的表,一共有四章,TASK_INFO_TEST, TASK_SUR_TEMP, WF_PROCESS_TEMP 这三张表 数据量都是在10万左右; 另外一张表 WF_TASK_TEMP 数据量在 25万左右。
执行计划如下图
关联字段以及WHERE筛选条件上都有索引;
这样执行很慢,需要10秒左右。
另外,我测试了下,如果去掉STATUS IN ('TS06','TS07') 这个筛选条件,则只需要不到1秒时间,执行计划如下图:
这两条SQL执行后的结果集是一样的。(但是由于业务逻辑,不能去掉,只是测试下)
这个STATUS为TS06和TS07的在整个表中占有4000条左右记录,表一共有10万条记录,这个字段一共只会有7种可能,即从TS02到TS08.
我不是很懂SQL调优,但是我觉得这个是由于DB2优化器默认考虑成本的原因,可以看出第一条的成本明显低于第二条,我觉得要把第一条SQL的执行计划也调整为 类似第二个的,两两表先连接,然后让他们两个结果集来连接。
不知道我理解的对不对,请教各位大侠,这个SQL该如何调整下呢,我们现在需要这个SQL以最快的速度查询得出结果,而不考虑成本;
请各位高手·大侠们不吝赐教啊!!!
另附以上三表的创建语句以及索引创建情况:
还有一张表 TASK_INFO_TEST主键为TASK_ID, 上面有一个索引 索引字段 顺序为 STATUS,BK_NO,TASK_ID,SUR_ID。