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的全文搜索功能

12.7. 全文搜索功能 12.7.1. 布尔全文搜索12.7.2. 全文搜索带查询扩展12.7.3. 全文停止字12.7.4. 全文限定条件12.7.5. 微调MySQL全文搜索 ...

MySQL中文全文检索demoSQL

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

MYSQL数据检索总结

用到的表是employee,建表语句如下:create table employee( number varchar(20) primary key not null, name varchar(20...

MySQL使用全文索引(fulltext index)

1.创建全文索引(FullText index)        旧版的MySQL的全文索引只能用在MyISAM表格的char、varchar和text的字段上。         不过新版的...

关于Mysql的全文本搜索功能

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

MySQL中的全文检索(1)

一、概述      MySQL中的全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度。二、语法      MATCH (col1,col2,...) AGAIN...
  • navygong
  • navygong
  • 2009年05月14日 21:03
  • 13542

mysql全文索引使用方法

一、设置全文索引: 添加:ALTER TABLE table_name ADD FULLTEXT ( column); 删除:DROP INDEX index_name ON table_na...

[全文索引]MySQL 全文搜索支持, mysql 5.6.4支持Innodb的全文检索和类memcache的nosql支持。

背景:搞个个人博客的全文搜索得用like啥的,现在mysql版本号已经大于5.6.4了也就支持了innodb的全文搜索了,刚查了下目前版本号都到MySQL Community Server 5.6.1...

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

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

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

全文检索在MySQL里面很早就支持了,只不过一直以来只支持英文。缘由是他从来都使用空格来作为分词的分隔符,而对于中文来讲,显然用空格就不合适,需要针对中文语义进行分词。这不,从MySQL 5.7开始,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql 全文检索 百万条记录的快速检索
举报原因:
原因补充:

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