mysql 全文检索 百万条记录的快速检索

转载 2016年06月02日 09:13:00

说起数据库,MYSQL最适合用于小型运用的开发。最近想弄一个简单的音乐网站玩一下,数据库是以前在网上爬去的。数据不是特别多,但是也不少,查了一下一共有六十多万条歌曲的记录。既然是做音乐网站的话,首先要有一个搜索的功能,至少要能够搜索你有的歌曲吧。由于以前没有怎么认真弄过sql查询的问题,所以还是用最简单的方法去查询,但是这次遇到了单表上百万记录。我用select* from song where songname like'%key%';去查询,结果效率低到难以忍受。竟然用了三十多秒才出结果!这对于任何运用都是没办法忍受的。后来就想着去做sql查询的优化,google了很久,试过了建立索引,改变表的结构等等都无济于事啊。后来看到一篇专业文章写道,其实对应大数据量查询的时候,很多数据库是支持全文检索的


知道以后我立马开始弄全文检索:

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

 alter table songengine=MyISAM;

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

alter table add fulltext index(songname);

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

alter table add fulltext index(songname,singername);

这样做好以后呢,就可以对表进行全文检索了,速度提升是飞一般的感觉啊!现在的结果是秒出啊。可以这样去检索字段:

select * from song where match(singername) against('周杰伦') ;

或者多字段:

select * from song where match(singername,songname)against('风雨');

 但是,其实这个时候中文是没办法得到结果的!应为MYSQL目前只支持英文字符的全文搜索,这又叫我蛋疼了一下。后来看到一个论文说是按照把中文转化为拼音,就可以用英文检索对中文进行检索了。看了一下拼音的思路以后我就有了一个注意,在表里面为每一个需要检索的字段对应添加一个拼音字段,检索的时候直接对拼音检索就可以了

 首先要解决的问题是在已有的表里面添加拼音字段,我用的是java,将中文转化为拼音不是难事。所以我写了一个小程序,修改了一下表的结构,为每一个需要查询的字段添加了一个对应的拼音字段。

 这样的话在查询的时候先把中文关键字先用小程序转化为拼音然后对拼音字段进行全文检索就能得到结果了。我的中文检索是这样子解决的。也许有其它办法,这个方法解决了我的小问题。

MySQL模糊搜索优化

InnoDB引擎对FULLTEXT索引的支持是MySQL5.6新引入的特性,之前只有MyISAM引擎支持FULLTEXT索引。对于FULLTEXT索引的内容可以使用MATCH()…AGAINST语法进...
  • panjican
  • panjican
  • 2016年09月13日 11:21
  • 4525

关于Mysql的全文本搜索功能

为什么要使用全文本搜索? 其实有类似于全文本搜索的功能: 1、LIKE关键字:利用通配符操作匹配文本,使用LIKE,能够查找包含特殊值或部分值的行(不管这些值在什么位置)。 2、...
  • baidu_30000217
  • baidu_30000217
  • 2015年12月04日 11:11
  • 4443

Mysql数据库几种搜索引擎

转载自:http://blog.sina.com.cn/s/blog_8de41d3f0102w63k.html MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。...
  • yangfengjueqi
  • yangfengjueqi
  • 2017年07月10日 15:46
  • 1291

MySQL模糊查询全文索引

MySQL模糊查询全文索引全文索引 --------------------------------------------------------------- # MySQL-Front Dump...
  • fkedwgwy
  • fkedwgwy
  • 2008年05月23日 15:34
  • 4855

MySQL中文全文检索demoSQL

一、概述 MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度。 二、语法 MATCH (col1,c...
  • soonfly
  • soonfly
  • 2016年04月15日 17:20
  • 1435

Mysql 全文本检索

mysql 全文索引 注意 并非所有的引擎都支持 全文检索 mysql最常用的引擎 INnodb 和 myisam 后者支持全文检索 前者不支持 创建表的时候指定要检...
  • yujin753
  • yujin753
  • 2015年01月22日 11:07
  • 1331

PHP+MySQL数据库之中文全文检索解决方案

由于MYSQL仅支持英文的全文索引FULLTEXT,不支持中文,因为中文不能像英文那样通过空格来准确的判断单词,而需要通过语义来判断,这就需要我们对中文进行切词。 但是我们可以通过另一种方式来曲线解...
  • xm1331305
  • xm1331305
  • 2014年08月16日 14:56
  • 762

深度解析MySQL 5.7之中文全文检索

InnoDB默认的全文索引parser非常合适于Latin,因为Latin是通过空格来分词的。但对于像中文,日文和韩文来说,没有这样的分隔符。一个词可以由多个字来组成,所以我们需要用不同的方式来处理。...
  • h106140873
  • h106140873
  • 2017年04月03日 23:52
  • 1877

MySQL 5.7 深度解析: 中文全文检索

全文检索在MySQL里面很早就支持了,只不过一直以来只支持英文。缘由是他从来都使用空格来作为分词的分隔符,而对于中文来讲,显然用空格就不合适,需要针对中文语义进行分词。这不,从MySQL 5.7开始,...
  • zwrj1130
  • zwrj1130
  • 2017年02月17日 11:29
  • 942

PHP+MYSQL实现全文检索及全文检索工具

使用分词类库,分词类库请参见:http://www.xunsearch.com/scws/ 如何使用PHP实现全文检索功能? 很多人可能马上可以想出几种方案,比如:文件检索法、采用SQL的like语...
  • u014649204
  • u014649204
  • 2014年05月05日 11:11
  • 5419
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql 全文检索 百万条记录的快速检索
举报原因:
原因补充:

(最多只允许输入30个字)