当前位置:首页 > 数据库 > Oracle技术

SQL优化请问

优良自学吧提供SQL优化请问,SQL优化请教各位:如下SQL,执行效率非常慢!基本上要十分钟。 select cinventoryid   from ia_detailledger  where dr = 0    

SQL优化请教
各位:如下SQL,执行效率非常慢!基本上要十分钟。
select cinventoryid
  from ia_detailledger
 where dr = 0
   and pk_org = '1001N710000000008MPF'
   and cstockorgid = '0001N710000000001MSM'
   and cstordocid = '原料仓'
   and pk_group = '0001N7100000000004TG'
   and pk_book = '1001N710000000008KHK'
   and caccountperiod > = '2013-11'
   and caccountperiod < = '2014-09'
   and (csrcmodulecode in ('IC', 'PO', 'TO', 'SO') or
       csrcmodulecode = 'IA' and cbilltypecode = 'I6' and
       bwithdrawalflag = 'Y')
   and fintransitflag < > 1

执行计划如下:
SQL优化请问
该ia_detailledger表数据量较大:奖金700万行数据
SQL优化请问
该表现有索引如下:
SQL优化请问
请教各位该如何进行优化?
是否继续增加索引?已经更新过统计信息了

------解决思路----------------------
光这些没法优化。
你的数据特点是什么,可以考虑按照时间分区,
针对条件中重复度高的可以建位图索引,例如
cstordocid = '原料仓'满足这个数据多吗。要分析你数据的构造。
------解决思路----------------------
从上面的执行计划来看,查询使用了( pk_org,caccountperiod)的联合索引,但效率不高,因为匹配 pk_org = '1001N710000000008MPF' and and caccountperiod > = '2013-11'  and caccountperiod < = '2014-09' 的记录数很大。可以分析上面的查询条件中哪个或哪些匹配的记录数最少,然后创建相应的索引。
------解决思路----------------------
建议你这个只能建组合索引,单个索引效果不是很明显,
然后把过滤大的排在前面,如果不会组合索引,百度一下
http://blog.sina.com.cn/s/blog_5f597b690102v9tt.html
------解决思路----------------------
建议首先将用到复合索引的字段放到WHERE条件最后,SQL解析的方式是先从远离WHERE条件的字段先进行过滤。在就是少用IN和OR

(本文来自互联网,不代表搜站(http://www.ylzx8.cn/)的观点和立场)
本站所有内容来自互联网,若本站收录的信息无意侵犯了贵司版权,请给我们来信(ylzx8cn@163.com),我们会及时处理和回复,谢谢