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