首页 / 帖子
请教一下有关模糊查询的优化,有没有什么比较成熟的好的策略?

在MySQL里面的模块查询,有什么好的优化方案,谢谢。

1个答案
王斌
发布于:2015-01-05 14:34

模糊查询分为半模糊和全模糊,也就是:  

select * from book where name like 'xxx%';(半模糊)  

select * from book where name like '%xxx%';(全模糊)  

半模糊可以可以使用到索引,全模糊在上面场景是不能使用到索引的,但可以进行一些改进,比如: 

select book.*  from book , 
(select book_id from book where book_name like '%算法%') book_search_id    
where book.book_id=book_search_id.book_id;

注意这里book_id是主键,同时在book_name上创建了索引  

上面的sql语句可以利用全索引扫描来完成优化,但是性能不会太好;特别在数据量大,请求频繁的业务场景下不要在数据库进行模糊查询;  

非得使用数据库的话 ,建议不要在生产库进行查询,可以在只读节点进行查询,避免查询造成主业务数据库的资源消耗完,导致故障.  

可以使用一些开源的搜索引擎技术,比如sphinx,apache solr等。