sql like模糊查询与索引

一、like与索引
  1. like %keyword
    索引失效,使用全表扫描。但可以通过翻转函数 + like前模糊查询 + 建立翻转函数索引 = 走翻转函数索引,不走全表扫描。
  2. like keyword%
    索引有效
  3. like %keyword%
    索引失效,也无法使用反向索引。
二、优化like查询

使用下面的函数来进行模糊查询,如果出现的位置 > 0,则表示包含该字符串。查询效率比 like 要高。
例如: table.field like “%AAA%” 可以改为 LOCATE(“AAA”,table.field) > 0

  1. LOCATE(substr,str)
    返回子串 substr 在字符串 str 中第一次出现的位置,没有则返回0。
    SELECT *
    FROM t_blog t
    WHERE LOCATE("xxx",t.field) > 0
    
  2. POSITION(substr IN str)
    返回子串 substr 在字符串 str 中第一次出现的位置,没有则返回0。position 是 locate 的别名。
    SELECT *
    FROM t_blog t
    WHERE POSITION("xxx" IN t.field) > 0
    
  3. INSTR(str,substr)
    返回子串 substr 在字符串 str 中第一次出现的位置,没有则返回0。这和 LOCATE() 的双参数形式相同,只是参数的顺序相反。
    SELECT *
    FROM t_blog t
    WHERE INSTR(t.field,"xxx") > 0
    
三、查询 %xx 的记录
SELECT t.title
FROM t_blog t
WHERE t.title LIKE "%java"

在执行的时候,执行计划显示,消耗值,io值,cpu值均非常大,原因是 like后模糊查询 导致索引失效,进行全表扫描。
解决方法:这种只有前模糊查询的sql可以改造为如下写法

SELECT t.title
FROM t_blog t
WHERE REVERSE(t.title) LIKE REVERSE("%java)"

使用 翻转函数 + like前模糊查询 + 建立翻转函数索引 = 走翻转函数索引,不走全扫描。有效降低消耗值,io值,cpu值这三个指标,尤其是io值的降低。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值