日期:2014-05-17  浏览次数:20826 次

Oracle中提高大数据量查询速度问题
select   vw013.ver,vw013.ACT,vw016.RN,vw016.RA,vw013.LS  

From   vw016,vw013

  WHERE   vw013.ver   =   0     and   vw016.PROJ   =   vw013.PROJ     and  
 
  vw016.VER   =   vw013.VER     and   vw016.ACT   =   vw013.ACT     and   vw016.proj   not   like   'FCST_% '

其中vw013表中有1千万条以上数据,vw016表中有500万以上的数据,有什么方法可以加快检索速度?两个表的proj、ver、act上都有索引

------解决方案--------------------
select vw013.ver,vw013.ACT,vw016.RN,vw016.RA,vw013.LS
From vw016,vw013
WHERE vw013.ver = 0 and vw016.PROJ = vw013.PROJ and
vw016.VER = vw013.VER and vw016.ACT = vw013.ACT and substr(vw016.proj,1,5) <> 'FCST_ '

去掉like 試試,不行再給vw016加上函數索引substr(vw016.proj,1,5)
------解决方案--------------------
提高查询效率方法很多
可以先
dbms_stats.gather_table_stats 下相应的表,对相应表统计分析
来提高关联速度和数据存取
尽量不要使用 not like 在查询时CBO会停用索引的
改成 like 'XXX ' or like 'XXX '
假如值多的话,只能 按照LS的建立函数索引
不建议使用 <> 一样会停用索引的 改成如下
substr(vw016.proj,1,5) < 'FCST_ ' and substr(vw016.proj,1,5)> 'FCST_ '
------解决方案--------------------
如果没有使用分区,首先要使用分区。分区注意:根据数据的情况决定在哪个字段上做范围分区,在哪些字段上做哈希散列,最后再考虑索引。
------解决方案--------------------

不要使用NOT
------解决方案--------------------
最好是建分区表,并建立相应的函数索引
------解决方案--------------------
不要使用not