日期:2014-05-17  浏览次数:20814 次

ORACLE 中的单列索引和多列索引
如例,建这样一个索引:
create index temp1 on(a,b,c,d)
那么在查询时,如果条件为:
where a = '' and c = ''
也能用到这个索引吗?为什么?
这是最左前缀之外的oracle特性吗?还是最左前缀的一种?
从网上搜的原理都太难理解,麻烦各位高手给通俗的讲解一下。
谢谢!
oracle 索引

------解决方案--------------------
在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证使用到该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。
------解决方案--------------------
能起作用,下面是例子:

在date,place,amount上的组合索引
select count(*) from record where date >'19991201' and date < '19991214' and amount >2000(< 1秒)
select date,sum(amount) from record group by date(11秒)
select count(*) from record where date >'19990901' and place in ('BJ','SH')(< 1秒)

分析:这是一个合理的组合索引。它将date作为前导列,使每个SQL都可以利用索引,并且在第一和第三个SQL中形成了索引覆盖,因而性能达到了最优。
------解决方案--------------------
你索引是a,b,c,d
只要有a  就可能用到索引
去看下索引的原理
先按a数据排序  然后同一个a列值里面再按b数据排序  然后依次
所以除去a列的话  其实bcd列的数据可以看做是无序的 
------解决方案--------------------
复合索引结构图