结论:
- like %keyword 索引失效,使用全表扫描。但可以通过翻转函数+like前模糊查询+建立翻转函数索引=走翻转函数索引,不走全表扫描。
- like keyword% 索引有效。
- like %keyword% 索引失效,也无法使用反向索引
优化:
- LOCATE(substr,str):返回字符串str中第一次出现子字符串的位置 substr,没有返回0
table.field like ‘%AAA%’ 可以改为 locate (‘AAA’ , table.field) > 0。
扩展:判断site表中的url是否包含’http://'子串,如果不包含则拼接在url字符串开头
update site set url=concat(“http://”,url) where locate (“http://”,url) = 0 - INSTR(str,substr):返回字符串 str 中子字符串的第一个出现位置。这和LOCATE()的双参数形式相同,只是参数的顺序被颠倒。
- 使用reverse翻转函数