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