2000W条数据,加入全文检索的总结
一) 前期准备测试:
- 旧版的MySQL的全文索引只能用在MyISAM表格的char、varchar和text的字段上。
- 不过新版的MySQL5.6.24上InnoDB引擎也加入了全文索引,所以具体信息要随时关注官网,
下载mySql5.7
- https://www.baidu.com/link?url=khagDiqblcdIqVeGBc4wlqAemFd5LUgs9fSUba99s2sJuvxeqY3Y3S08HEpgJ0Zphhh7LxItOZ-_eBFJf8cgX5-fmCjeNGI8onXBKCGwWL7&wd=&eqid=ee8b4c100002ff7e0000000459faecde
- 直接使用 alter table testtable add fulltext index testfulltext(clumn1,clumn2),可检索数字,英文,测时检索中文失败
解决无法查询中文,修改配置文件
- my.ini
- [mysqld] ngramtokensize=2
建表同时加入全文检索
CREATE TABLE articles (id INTUNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,title VARCHAR(200),body TEXT,FULLTEXT (title,body) WITH PARSER ngram) ENGINE=InnoDB CHARACTER SET utf8mb4;修改方式添加全文检索
alter table testtable add fulltext index testfulltext(clumn1,clumn2) with parser ngram;- 新建方式添加全文检索
CREATE FULLTEXT INDEX ft_email_name ON student(name) with parser ngram;` - 验证全文检索结果
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('关键词' IN NATURAL LANGUAGE MODE); - 关键字不能太短,小于两个字无法匹配
二) 2000W数据实测:
- 数据库已经建好,数据已经插入,总数据量为1980W条数据
添加全文检索: CREATE FULLTEXT INDEX ft_pat_search ON pat_patent(`aa`,`ad`,`agc`,`an`,`pn`,`in`,`pa`,`ti`,`co`) with parser ngram;
- 查询: SELECT * FROM pat_patent WHERE MATCH (`aa`,`ad`,`agc`,`an`,`pn`,`in`,`pa`,`ti`,`co`) AGAINST ('三星' IN NATURAL LANGUAGE MODE);
- 结果用时183s,耗时太长
- 分析原因1:索引量过大导致过慢,尝试缩短检索字段(只选用一个字段)
CREATE FULLTEXT INDEX ft_pat_search_ti ON pat_patent(`ti`) with parser ngram;
- 结果可明显提升检索速率,检索用时1.3s;
- 依旧不理想,继续分析原因,可能是查询结果数据量过大,传输受限,尝试加入分页
SELECT * FROM pat_patent WHERE MATCH (`aa`,`ad`,`agc`,`an`,`pn`,`in`,`pa`,`ti`,`co`) AGAINST ('三星' IN NATURAL LANGUAGE MODE) LIMIT 10, 10;
- 查询结果0.5s,测试成功
三)总结:
- 版本更新至5.7,注意数据库路径选择在非C盘,负责会在添加全文检索时报错ERRO:1878
- 添加检索式加上 with parser ngram,配置文件加上ngramtokensize=2,可解决搜索中文问题
- 提高查询效率,可加入分页
2000W条数据,加入全文检索的总结的更多相关文章
- 提高MYSQL百万条数据的查询速度
提高MYSQL百万条数据的查询速度 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 nul ...
- WebGIS项目中利用mysql控制点库进行千万条数据坐标转换时的分表分区优化方案
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 项目中有1000万条历史案卷,为某地方坐标系数据,我们的真实 ...
- 在UPDATE中更新TOP条数据以及UPDATE更新中使用ORDER BY
正常查询语句中TOP的运用: SELECT TOP 1000 * FROM MP_MemberGrade 随意更新一张表中满足条件的前N条数据: UPDATE TOP (1) MP_Member ...
- 绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来
我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...
- mysql插入多条数据时间复杂度比较
SQL脚本 select * from users; 方式一: insert into users(name, age, course_id) VALUES("test",1, & ...
- 不同数据库,查询前n条数据的SQL语句
不同的数据库,支持的SQL语法略有不同,以下是不同数据库查询前n条数据的SQl语句 SQL Server(MSSQL) SELECT TOP n * FROM table_name ORACLE SE ...
- mvc添加多条数据到数据库
from : http://www.th7.cn/Program/net/201502/387849.shtml mvc的视图太强大了,个人刚刚接触.(初级菜鸟,懂的不多,往大神们指点)需求是,客户点 ...
- asp.net mvc添加多条数据到数据库
mvc的视图太强大了,个人刚刚接触.(初级菜鸟,懂的不多,往大神们指点)需求是,客户点击添加按钮弹出一个框选择产品后直接添加到表单中,在表单可以自己更改产品的数量,以及一些信息.mvc表单提交的时候只 ...
- sql 更新列表中最老的一条数据
今天组长给个任务说要给摄像头触发一个列表.让缓存5条数据,每次摄像头触发更新一条,丢掉最老的一条数据.原来的update是直接更新掉一条,没带缓存的.然后搞了个sql语句,是这样的: UPDATE C ...
随机推荐
- Python数据分析流程
一.数据分析的步骤: 1.查看数据并提出问题 2.数据清洗 3.代码编写,提取出结果数据,并分析是否有异常数据,修改代码 4.根据数据选择合适的图表进行展示 5.根据图表小组讨论交流获得最终的结果 二 ...
- VirtualBox 磁盘容量调整
起因 此前用VBox,初始时动态或固定分配的磁盘容量用完了就再重新建一个磁盘,但是有个虚拟机的系统分区容量不够了,把整个磁盘都分成系统盘仍然不够,于是研究了下磁盘容量调整问题. 正文 1,从当前虚拟机 ...
- ServiceStack.Text / Newtonsoft.Json 两种json序列化性能比较
JSON序列化现在应用非常多,尤其在前后端分离的情况下,平常大多数C#下都使用Newtonsoft.Json来操作,量少的情况下,还可以忽略,但量大的情况下就要考虑使用ServiceStack.Tex ...
- 【转】FTP主动模式和被动模式的比较
总是记不住FTP主动和被动模式的区别.放在这里,以备日后查阅. FTP是仅基于TCP的服务,不支持UDP.与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口).通常来说这 ...
- GRE 协议简介
1. 协议简介 gre(generic routing encapsulation,通用路由封装)协议是对某些网络层协议(如ip 和ipx)的数据报进行封装,使这些被封装的数据报能够在另一个网络 ...
- Jquery滚动到页面底部自动Ajax加载图文列表,类似图片懒加载效果,带加载效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- win10 uwp 获得元素绝对坐标
有时候需要获得一个元素,相对窗口的坐标,在修改他的位置可以使用. 那么 UWP 如何获得元素坐标? 我提供了一个方法,可以获得元素的坐标. 首先需要获得元素,如果没有获得元素,那么如何得到他的坐标? ...
- .NET下发送邮件遇到问题及解决方案
.NET后台代码利用QQ邮箱服务器发送邮件遇到的问题: "mail from address must be same as authorization user" 首先,看下我的 ...
- jsp与servlet联合处理
通过model1 或者说 model2 我们知道的mvc 的分层思想, 在model1 中jsp 通负责显示,有负责控制逻辑结构, 那么怎么做呢,看下面的请求过程. <?xml version= ...
- Linux入门(17)——Ubuntu16.04显示内存CPU网速等(System Monitor)
终端查看内存状况有两个命令 top htop 如果系统没有安装htop的话,那就安装一下. 然而这样比较麻烦,System Monitor是个不错的选择,System Monitor可以显示网速,内存 ...