Oracle(一)-Oracle中的Like语句与索引

本文介绍了SQL中使用Like语句时索引的有效性和限制条件,详细解释了为何只有前导通配符才能利用索引,并提出了通过函数索引来优化非前导通配符查询的方法。

  索引的使用

   能使用索引的情况:Like前导字符,比如c like 'DBA%',这样可以使用c列的索引;
   不能能使用索引的情况:Like非前导字符,比如c like '%DBA',这样不可以使用c列的索引

  原因

    因为索引是顺序的是按照字母的顺序储存的。比如:a11 a21d11 a31在索引中储存的顺序为 a11 a21 a31 d11,所以用like匹配,只能使用前导匹配。所以再用like语句筛选数据的时候尽量将%写在后面。

  优化

    如果不得不写在前面且又想采用索引的话,可以使用以下几个方式进行优化,思路基本上都是建立函数索引

    转换成制定的函数

    如筛选 c like '%1',如果有索引,建议将substr换成like,建立函数索引substr(c,2,1) ,然后将like '%1'改写为substr(c,2,1)=1。

    翻转函数索引

     反转索引:当语句为c like '%abc'时,其可以转换为reverse index(c) like 'cba%',那么针对上例中,如果建立函数索引reverse(c),其在所以中储存的值为11a 11d 12a 13a,那么此时就可以将 c like '%1',转化为reserve(c) like '1%'.

  但是对于'%1%',此方法不适用。
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值