mysql优化 - mysql like 模糊搜索
本文介绍了mysql优化 - mysql like 模糊搜索的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
问题一 name like '%联想%' 是全表搜索,如何使用索引来优化查询?
有推荐用mysql 函数 locate/instr explain SELECT * FROM product where name like '%联想%'; explain SELECT * FROM product where LOCATE('联想',name)>0 ; explain SELECT * FROM product where instr(name, '联想')>0 ; 看着解释没什么区别啊,都是用了全表搜索
问题二 name like '%联想%' 是匹配的 XX联想XX。如何匹配 XX联XX XX想XX,现在是把搜索内容拆分了,name like '%联%' or name like '%想%'
解决方案
第一个问题: 如果左边有通配符%
的话,是无法走索引的,只能走全表扫描,最好的结果是select
中只查询索引覆盖的列,比如假设只有name
s列带索引,select name from product where name like '%联想%'
,走的是扫描整个索引,比全表扫描要快一点,但是应用很局限,一般不会只查被索引覆盖的列啊.
第二个问题: 这种分词查询简单点就用全文索引, 参考这个MySQL使用全文索引(fulltext index), 如果表超级大,性能差的话, 上搜索引擎,比如solr
,Lucene
、Sphinx
.
这篇关于mysql优化 - mysql like 模糊搜索的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文