以 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 表进行全表扫描为什么会这样?
Select * From
(Select * From dept Where deptno = '10') dept Left Join emp
On dept.deptno = emp.deptno如果在 emp.deptno 上创建了一般索引,则执行计划中发现对 emp 表根据索引扫描
而如果在 emp.deptno 创建位图索引,则对 emp 表进行全表扫描为什么会这样?
理论上是会根据最优化的方式来执行sql,比如一个表的数据量很小,那么全表扫描就能非常快的查询了,而如果走索引的话,说不定更费劲,索引就不会走索引了~这个在oracle中常用发生
看一下你sql的执行计划。
再使用hint强制使用索引,看一下执行计划。
两者比较一下。
最后如果你觉得走索引的开销较小,那可能是因为表长时间没有收集统计信息。
使用anlyze命令收集一下。
再看一下normal状态下的sql语句执行计划。
希望能够帮助到你。