索引左前缀性的三层意思

假设有如下表: create table AAA (a varchar2(32) ,b varchar2(32),c date);
在a和c列上建普通索引: create index iN_AAA_1 on AAA (a, c);
    1.索引左前缀性的第一层意思:必须用到索引的第一个字段。select * from AAA where b=:xxx and c=sysdate;则不会用到索引,因为必须有a出现在where 语句中才会使用到该索引。
   2. 索引前缀性的第二层意思:对于索引的第一个字段,用like时左边必须是固定值,通配符只能出现在右边。select * from AAA where a like ”1%”;会用到索引;而select * from AAA where a like ”%1”;不会用到索引。
    3.索引前缀性的第三层意思:如果在字段前加了函数,则索引会被抑制,例如:select * from aaa where trim(a)=1,则不会用到索引。
           在字段前嵌入了表达式,索引也将被抑制。假设a是date格式的,那么where a+7<sysdate将不会用到索引,而where a<sysdate-7会用到索引。
还有两个特殊声明:
         1).select * from AAA where a=:xxx and c=sysdate与 select * from AAA where c=sysdate and a=:xxx;都会用到索引,即与where语句中字段出现的顺序无关;
         2).select * from AAA where a=:xxx and b=1;会使用索引,此时A出现,即使其他字段不是索引字段也会使用到索引。
posted @ 2009-11-17 15:00  黑石社员  阅读(229)  评论(0)    收藏  举报