玖叶教程网

前端编程开发入门

如何优化Mysql执行查询数据的速度

在项目中数据量小的情况下使用like查询速度还行,但是随着数据一天一天增加,再使用like进行模糊查询的时候速度上就会显得比较慢,现提供两套解决方案:

问题:

使用like查询效率很慢

select inner_id,title from news_info where title like ‘%测试%’;

方案一:

使用MySQL数据库全文检索的功能;

1.首先我的表默认是:innoDB,这种表的类型不支持全文检索,所以要先改变其类型为MyISAM。

alter news_info title engine=MyISAM;

2.然后要在对应的要进行查找的字段上面建立全文检索的索引:

alter news_info add fulltext index(title);

如果要同时对多个字段进行检索可以这样:

alter news_info add fulltext index(title,source);

这样就可以去检索字段:

select inner_id,title from news_info where match(title) against(‘测试’) ;

或者多字段:

select inner_id,title from news_info where match(title,source) against(‘测试’);

问题来了,没有结果,经过查询得知MySQL全文检索默认不支持中文,且对英文检索时忽略大小写

需要修改表结构增加拼音字段,将索引字段中文转化成拼音,Java方法比较好实现;

方案二:

使用缓存技术(redis);

1.将查询出来的结果放在redis缓存中;

2.查询时判断redis中是否有对应的数据,有的话直接返回,没有的话将数据执行1;

方案三:

使用搜索引擎ElasticSearch

http://blog.csdn.net/lu_wei_wei/article/details/50920435

总结:

使用方案一需要修改现有的数据库表结构,有一定的风险性;

使用方案二不影响数据库表结果,修改查询方法即可,但是首次查询关键字的时候会比较慢,再次查询的时候查询速度会很快;使用这样方式可以将信息发布的时候直接放在redis里面,查询时直接查询redis;

使用方案三在搜索速度上比前两种方式好,而且方案三支持高亮显示、分词等,本人正在研究ElasticSearch。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言