索引 ---- 最左前缀的解释

在很多数据库中,当创建多列的索引的时候,会出现最左前缀的现象。

假设有如下表: 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出现,即使其他字段不是索引字段也会使用到索引。


参考:https://blog.csdn.net/davidwang9527/article/details/2236841

猜你喜欢

转载自blog.csdn.net/qq_36098284/article/details/80178051