bwxiao 发表于 2015-2-26 18:20

熟悉db2的来指点一下啊啊啊啊啊啊

语句如下:
SELECT SUM(L.QTY_FORE)*0.8*I.COE ,SUM(L.AMT)*0.002*I.COE ,I.SCORE
FROM CUST_CO C,CUST_CO_LINE L,CUSTINFO I
WHERE  C.STATUS!='08' AND C.CUST_ID=I.CUST_ID  
AND C.CRT_DATE BETWEEN '20150221' AND '20150226'
AND C.NUM=L.NUM  
AND L.T_ID NOT IN('11','22','33')
AND C.C_ID IN('98','99')
GROUP BY I.CUST_ID,I.COE,I.SCORE;



C.C_ID IN('98','99')
这里,改成C_ID='98'
或者IN 里面值只有一个时,执行效率非常的慢。

但是只要IN里有两个以上甚至几十个,或者是写成两个相同的值,执行效率也非常的快。

搞不懂什么原因,请大家指点一下。

菊菊思密达 发表于 2015-2-26 18:27

我还以为是暗黑破坏神2

intothebbc 发表于 2015-2-26 18:29

收集下统计信息吧。比较下 执行计划

bwxiao 发表于 2015-2-26 18:29

菊菊思密达 发表于 2015-2-26 18:27 static/image/common/back.gif
我还以为是暗黑破坏神2

[:34][:34]

intothebbc 发表于 2015-2-26 18:30

估计是用错索引了。

bwxiao 发表于 2015-2-26 18:33

intothebbc 发表于 2015-2-26 18:29 static/image/common/back.gif
收集下统计信息吧。比较下 执行计划

谢青云大神

研究一下。。我是彩笔。。。

bwxiao 发表于 2015-2-26 20:27

intothebbc 发表于 2015-2-26 18:30 static/image/common/back.gif
估计是用错索引了。


哎,我就不是程序员,却偏偏要写程序,都是硬着头皮上的,
从程序、数据库到平台估计都很多问题,只能将就着用。
不个这数据库本身到是应该没有多大问题,公司的业务系统,外包开发的用了很多年了,我只是写点查询,
之前没有问题,后来改了点东西就经常造成锁表,今天完全顶不住了。

然后无意发现居然用IN多查几个值反而非常快,刚刚把语句从=改成把值复制两个到in里面今天将就着。。。
明天再弄了。

说谎の天使 发表于 2015-2-26 22:07

常用的话,写成存储过程,带宿主变量。

kaka_81 发表于 2015-2-26 22:13

执行前分析表了吗

stupid_ks 发表于 2015-2-26 22:53

看看你的索引吧

lyric0221 发表于 2015-2-27 01:30

可能是DB2的查询分析器在处理IN子句的时候采用了不同的优化策略导致的,这种情况下你应该查阅一下DB2的手册,是否有相关的配置开关,如果懒的话,那也别搞了直接随便加几个不可能存在的字串在IN子句里面。

话说回来,除了金融证券行业DB2现在很少用了吧
页: [1]
查看完整版本: 熟悉db2的来指点一下啊啊啊啊啊啊