mysql优化 - mysql like 模糊搜索

查看:152
本文介绍了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中只查询索引覆盖的列,比如假设只有names列带索引,select name from product where name like '%联想%',走的是扫描整个索引,比全表扫描要快一点,但是应用很局限,一般不会只查被索引覆盖的列啊.

第二个问题: 这种分词查询简单点就用全文索引, 参考这个MySQL使用全文索引(fulltext index), 如果表超级大,性能差的话, 上搜索引擎,比如solr,LuceneSphinx.

这篇关于mysql优化 - mysql like 模糊搜索的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆