金融其它调优

各位大侠们,请教一条SQL调优的问题啊

我是做开发的,现在遇到个SQL,执行的比较慢 ,SQL语句如下图显示

SQL语句.JPG




这个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。
参与5

4同行回答

雪瑶瑶雪瑶瑶网络管理员雪瑶瑶
那图好模糊 佛山装修公司别墅设计猫王防水广州装修公司显示全部
零售/批发 · 2013-01-22
浏览566
roger85roger85开发工程师上海
这个我已经试过了,就算改成>=TS06 and 显示全部
这个我已经试过了,就算改成>=TS06 and <=TS07 也一样的,主要问题不在这里,我今天又想了下,发现就第一个执行计划来说,问题出在连接WF_PROCESS的时候,连接字段出现隐式转换,造成索引效率低下,NLJOIN查询速度太慢;我已经在TASK_INFO表上另外加一个字段,字段类型建的跟WF_PROCESS的REF1的连接字段同类型,现在执行时间已经是零点几秒了。
不过我还有个想法,怎么让优化器,按照第二种那样,让WF_PROCESS和WF_TASK连接,因为这样,我即使不增加字段,执行效率也会更高。收起
金融其它 · 2013-01-16
浏览557
roger85roger85开发工程师上海
这个我已经试过了,就算改成>=TS06 and 显示全部
这个我已经试过了,就算改成>=TS06 and <=TS07 也一样的,主要问题不在这里,我今天又想了下,发现就第一个执行计划来说,问题出在连接WF_PROCESS的时候,连接字段出现隐式转换,造成索引效率低下,NLJOIN查询速度太慢;我已经在TASK_INFO表上另外加一个字段,字段类型建的跟WF_PROCESS的REF1的连接字段同类型,现在执行时间已经是零点几秒了。
不过我还有个想法,怎么让优化器,按照第二种那样,让WF_PROCESS和WF_TASK连接,因为这样,我即使不增加字段,执行效率也会更高。收起
金融其它 · 2013-01-16
浏览621
huxiaolong1989huxiaolong1989软件工程师hxl
STATUS IN ('TS06','TS07')    不要用 IN 啊,用IN 貌似不走索引吧显示全部
STATUS IN ('TS06','TS07')    不要用 IN 啊,用IN 貌似不走索引吧收起
2013-01-16
浏览599

提问者

roger85
开发工程师上海

相关问题

问题状态

  • 发布时间:2013-01-15
  • 关注会员:1 人
  • 问题浏览:10828
  • 最近回答:2013-01-22
  • X社区推广