使用下面的函数来进行模糊查询,如果出现的位置 > 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在执行的时候,执行计划显示,消耗值,io值,cpu值均非常大,原因是 like后模糊查询 导致索引失效,进行全表扫描。 解决方法:这种只有前模糊查询的sql可以改造为如下写法
SELECT t.title FROM t_blog t WHERE REVERSE(t.title) LIKE REVERSE("%java)"使用 翻转函数 + like前模糊查询 + 建立翻转函数索引 = 走翻转函数索引,不走全扫描。有效降低消耗值,io值,cpu值这三个指标,尤其是io值的降低。
