sql like模糊查询与索引

    科技2026-10-05  4

    目录

    一、like与索引二、优化like查询三、查询 %xx 的记录

    一、like与索引

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

    二、优化like查询

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

    LOCATE(substr,str) 返回子串 substr 在字符串 str 中第一次出现的位置,没有则返回0。SELECT * FROM t_blog t WHERE LOCATE("xxx",t.field) > 0 POSITION(substr IN str) 返回子串 substr 在字符串 str 中第一次出现的位置,没有则返回0。position 是 locate 的别名。SELECT * FROM t_blog t WHERE POSITION("xxx" IN t.field) > 0 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值的降低。

    Processed: 0.009, SQL: 9