日期:2014-05-16  浏览次数:22364 次

oracle (大数据)内连接速度优化
两张表数据量都是几千万,按天分区,每天数据有1-2百万,现两张表做内连接,速度很慢,两张表的索引都建好了,但是每次都是一张全表扫描,一张走索引,速度要1-2分钟,请教下内边接应该怎么建索引
------解决方案--------------------
如果你使用的Oracle 10g及以上版本的话,那么默认使用的优化算法是 “基于成本的优化器” (CBO),oracle会自己做一些成本考虑,如果是从大量数据查询少量数据,那么基本上oracle认为走索引比全表更低成本,反之,如果oracle先查询索引,然后通过索引中包含的数据的物理地址,再去获取表里面的数据,恐怕要比直接全表扫描要高的话,这种情况 CBO可能就会直接忽略掉索引,而使用全表扫描。
   所以,你另外一个表没走索引,应该是数据量比较大了
------解决方案--------------------
表分析过没有,两张表关联的列上是不是都建立了索引。Hash join产生的情况一般都是由于关联列上没有索引。另外建立的索引的类型也很关键,使用本地索引,可以利用分区剪切功能,可以更有效的筛选数据。
------解决方案--------------------
这个问题,你要提供每个表关联字段的类型和实际长度,还是哪个是索引。
大表走hash,也算正常。
大致看了一眼你的sql,是否应该建联合索引。
而且sql中使用分区缩小范围的步骤好似没有。