关于db2执行查询语句效率问题!!

badpp1020 2010-10-12 02:26:12
前提说明:查询日志表,数量级别较大,至少在数十万级别以上

执行下列语句,时间开销近9分钟
select count(*) from DocLog as a where a.opcode = '0D4F33AA756A4ECD63D546A114D89ADC' and a.opdate = '2010-10-11'
and a.taskName in ('XDOC_CHEQUE_INPUTACCNO_FST','XDOC_CHEQUE_INPUTACCNO_SND','XDOC_CHEQUE_INPUTACCNO_THIRD','XDOC_CHEQUE_INPUTVOUCHERNO_FST','XDOC_CHEQUE_INPUTVOUCHERNO_SND','XDOC_CHEQUE_INPUTVOUCHERNO_THIRD','XDOC_CHEQUE_INPUTDOCDATE_FST','XDOC_CHEQUE_INPUTPAYPASSWORD_FST','XDOC_CHEQUE_INPUTPAYPASSWORD_SND','XDOC_CREDIT_INPUT','XDOC_OTHERD_INPUT','XDOC_OTHERC_INPUT','XDOC_RETURND_INPUT','XDOC_RETURNC_INPUT')
and exists ( select * from DocLog as d where d.docID=a.docID and d.taskName = a.taskName and d.autoID > a.autoID)

然后将sql语句中的*替换成一个字段,效率未见明显提升


请指教!谢谢
...全文
168 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
badpp1020 2010-10-12
  • 打赏
  • 举报
回复
以上涉及到的字段exsits索引已经创建,且单独执行除exsits之前的语句,一秒内即可查询完毕,个人认为问题出在exsits那段语句中
oooooo1413 2010-10-12
  • 打赏
  • 举报
回复
建议楼主修改为:

select count(*) from DocLog as a where exists ( select * from DocLog as d where d.autoID > a.autoID and d.taskName = a.taskName and d.docID=a.docID)
and a.taskName in ('XDOC_CHEQUE_INPUTACCNO_FST','XDOC_CHEQUE_INPUTACCNO_SND','XDOC_CHEQUE_INPUTACCNO_THIRD','XDOC_CHEQUE_INPUTVOUCHERNO_FST','XDOC_CHEQUE_INPUTVOUCHERNO_SND','XDOC_CHEQUE_INPUTVOUCHERNO_THIRD','XDOC_CHEQUE_INPUTDOCDATE_FST','XDOC_CHEQUE_INPUTPAYPASSWORD_FST','XDOC_CHEQUE_INPUTPAYPASSWORD_SND','XDOC_CREDIT_INPUT','XDOC_OTHERD_INPUT','XDOC_OTHERC_INPUT','XDOC_RETURND_INPUT','XDOC_RETURNC_INPUT')
and a.opdate = '2010-10-11'
and a.opcode = '0D4F33AA756A4ECD63D546A114D89ADC'

再进行尝试,条件按过滤的量的大小进行排序,过滤的越多的离where越远
yangxiao_jiang 2010-10-12
  • 打赏
  • 举报
回复
看看执行计划是什么样子的
ACMAIN_CHM 2010-10-12
  • 打赏
  • 举报
回复
创建以下索引

DocLog(opcode,opdate,taskName)
DocLog(docID,taskName,autoID)
wwwwb 2010-10-12
  • 打赏
  • 举报
回复
索引情况是什么?
zhaojianmi1 2010-10-12
  • 打赏
  • 举报
回复
考虑在DocLog表的opcode、opdate、taskName、docID、autoID某些字段建立索引
单字段索引,或者联合索引
Mr_Bean 2010-10-12
  • 打赏
  • 举报
回复
a.taskName in ('XDOC_CHEQUE_INPUTACCNO_FST','XDOC_CHEQUE_INPUTACCNO_SND','XDOC_CHEQUE_INPUTACCNO_THIRD','XDOC_CHEQUE_INPUTVOUCHERNO_FST','XDOC_CHEQUE_INPUTVOUCHERNO_SND','XDOC_CHEQUE_INPUTVOUCHERNO_THIRD','XDOC_CHEQUE_INPUTDOCDATE_FST','XDOC_CHEQUE_INPUTPAYPASSWORD_FST','XDOC_CHEQUE_INPUTPAYPASSWORD_SND','XDOC_CREDIT_INPUT','XDOC_OTHERD_INPUT','XDOC_OTHERC_INPUT','XDOC_RETURND_INPUT','XDOC_RETURNC_INPUT')

效率瓶颈在这里~~~
Mr_Bean 2010-10-12
  • 打赏
  • 举报
回复
a.taskName in ('XDOC_CHEQUE_INPUTACCNO_FST','XDOC_CHEQUE_INPUTACCNO_SND','XDOC_CHEQUE_INPUTACCNO_THIRD','XDOC_CHEQUE_INPUTVOUCHERNO_FST','XDOC_CHEQUE_INPUTVOUCHERNO_SND','XDOC_CHEQUE_INPUTVOUCHERNO_THIRD','XDOC_CHEQUE_INPUTDOCDATE_FST','XDOC_CHEQUE_INPUTPAYPASSWORD_FST','XDOC_CHEQUE_INPUTPAYPASSWORD_SND','XDOC_CREDIT_INPUT','XDOC_OTHERD_INPUT','XDOC_OTHERC_INPUT','XDOC_RETURND_INPUT','XDOC_RETURNC_INPUT')

效率瓶颈在这里~~~
Mr_Bean 2010-10-12
  • 打赏
  • 举报
回复
a.taskName in ('XDOC_CHEQUE_INPUTACCNO_FST','XDOC_CHEQUE_INPUTACCNO_SND','XDOC_CHEQUE_INPUTACCNO_THIRD','XDOC_CHEQUE_INPUTVOUCHERNO_FST','XDOC_CHEQUE_INPUTVOUCHERNO_SND','XDOC_CHEQUE_INPUTVOUCHERNO_THIRD','XDOC_CHEQUE_INPUTDOCDATE_FST','XDOC_CHEQUE_INPUTPAYPASSWORD_FST','XDOC_CHEQUE_INPUTPAYPASSWORD_SND','XDOC_CREDIT_INPUT','XDOC_OTHERD_INPUT','XDOC_OTHERC_INPUT','XDOC_RETURND_INPUT','XDOC_RETURNC_INPUT')

效率瓶颈在这里~~~

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧