当前位置: 代码迷 >> Oracle开发 >> 位图索引出现在连接条件上不起作用?该怎么处理
  详细解决方案

位图索引出现在连接条件上不起作用?该怎么处理

热度:79   发布时间:2016-04-24 07:33:20.0
位图索引出现在连接条件上不起作用?
以 scott 用户下的 dept 和 emp 两个表为例
Select * From 
  (Select * From dept Where deptno = '10') dept Left Join emp 
  On dept.deptno = emp.deptno

如果在 emp.deptno 上创建了一般索引,则执行计划中发现对 emp 表根据索引扫描
而如果在 emp.deptno 创建位图索引,则对 emp 表进行全表扫描

为什么会这样?

------解决方案--------------------
这个根据你查询的数据量

也就是分析一下数据库直方图
------解决方案--------------------
oracle中建立了索引,但并不是说就一定会走这个索引,因为oracle在执行sql的时候有自己的优化方式,
理论上是会根据最优化的方式来执行sql,比如一个表的数据量很小,那么全表扫描就能非常快的查询了,而如果走索引的话,说不定更费劲,索引就不会走索引了~这个在oracle中常用发生
------解决方案--------------------
根据你说的,优化器应该是基于开销的。
看一下你sql的执行计划。
再使用hint强制使用索引,看一下执行计划。
两者比较一下。
最后如果你觉得走索引的开销较小,那可能是因为表长时间没有收集统计信息。
使用anlyze命令收集一下。
再看一下normal状态下的sql语句执行计划。
希望能够帮助到你。
  相关解决方案