Oracle-索引左前缀性的三层意思

本文详细阐述了Oracle数据库中索引使用的三个基本原则:索引的第一层含义是必须使用索引的第一个字段;第二层含义是在使用LIKE操作符时,左侧必须为固定值;第三层含义是避免在索引字段上使用函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    以下示例适合OPTIMIZER_MODE为CBO模式,Oracle 10g中已经取消RBO,仅保留CBO。
    假设有如下表: 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出现,即使其他字段不是索引字段也会使用到索引。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值