位图索引出现在连接条件上不起作用?
以 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语句执行计划。
希望能够帮助到你。