一) 前期准备测试:

  1. 旧版的MySQL的全文索引只能用在MyISAM表格的char、varchar和text的字段上。
  2. 不过新版的MySQL5.6.24上InnoDB引擎也加入了全文索引,所以具体信息要随时关注官网,
  3. 下载mySql5.7

    1. https://www.baidu.com/link?url=khagDiqblcdIqVeGBc4wlqAemFd5LUgs9fSUba99s2sJuvxeqY3Y3S08HEpgJ0Zphhh7LxItOZ-_eBFJf8cgX5-fmCjeNGI8onXBKCGwWL7&wd=&eqid=ee8b4c100002ff7e0000000459faecde
  4. 直接使用 alter table testtable add fulltext index testfulltext(clumn1,clumn2),可检索数字,英文,测时检索中文失败
  5. 解决无法查询中文,修改配置文件

    1. my.ini
    2. [mysqld] ngramtokensize=2
  6. 建表同时加入全文检索

    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;

  7. 修改方式添加全文检索 alter table testtable add fulltext index testfulltext(clumn1,clumn2) with parser ngram;

  8. 新建方式添加全文检索 CREATE FULLTEXT INDEX ft_email_name ON student(name) with parser ngram;`
  9. 验证全文检索结果 SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('关键词' IN NATURAL LANGUAGE MODE);
  10. 关键字不能太短,小于两个字无法匹配

二) 2000W数据实测:

  1. 数据库已经建好,数据已经插入,总数据量为1980W条数据
  2. 添加全文检索: CREATE FULLTEXT INDEX ft_pat_search ON pat_patent(`aa`,`ad`,`agc`,`an`,`pn`,`in`,`pa`,`ti`,`co`) with parser ngram;

  3. 查询: SELECT * FROM pat_patent WHERE MATCH (`aa`,`ad`,`agc`,`an`,`pn`,`in`,`pa`,`ti`,`co`) AGAINST ('三星' IN NATURAL LANGUAGE MODE);
  4. 结果用时183s,耗时太长
    1. 分析原因1:索引量过大导致过慢,尝试缩短检索字段(只选用一个字段)
    2. CREATE FULLTEXT INDEX ft_pat_search_ti ON pat_patent(`ti`) with parser ngram;

    3. 结果可明显提升检索速率,检索用时1.3s;
    4. 依旧不理想,继续分析原因,可能是查询结果数据量过大,传输受限,尝试加入分页
    5. SELECT * FROM pat_patent WHERE MATCH (`aa`,`ad`,`agc`,`an`,`pn`,`in`,`pa`,`ti`,`co`) AGAINST ('三星' IN NATURAL LANGUAGE MODE) LIMIT 10, 10;

    6. 查询结果0.5s,测试成功

三)总结:

  1. 版本更新至5.7,注意数据库路径选择在非C盘,负责会在添加全文检索时报错ERRO:1878
  2. 添加检索式加上 with parser ngram,配置文件加上ngramtokensize=2,可解决搜索中文问题
  3. 提高查询效率,可加入分页

2000W条数据,加入全文检索的总结的更多相关文章

  1. 提高MYSQL百万条数据的查询速度

    提高MYSQL百万条数据的查询速度 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 nul ...

  2. WebGIS项目中利用mysql控制点库进行千万条数据坐标转换时的分表分区优化方案

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 项目中有1000万条历史案卷,为某地方坐标系数据,我们的真实 ...

  3. 在UPDATE中更新TOP条数据以及UPDATE更新中使用ORDER BY

    正常查询语句中TOP的运用: SELECT TOP 1000 * FROM MP_MemberGrade   随意更新一张表中满足条件的前N条数据: UPDATE TOP (1) MP_Member ...

  4. 绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来

    我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...

  5. mysql插入多条数据时间复杂度比较

    SQL脚本 select * from users; 方式一: insert into users(name, age, course_id) VALUES("test",1, & ...

  6. 不同数据库,查询前n条数据的SQL语句

    不同的数据库,支持的SQL语法略有不同,以下是不同数据库查询前n条数据的SQl语句 SQL Server(MSSQL) SELECT TOP n * FROM table_name ORACLE SE ...

  7. mvc添加多条数据到数据库

    from : http://www.th7.cn/Program/net/201502/387849.shtml mvc的视图太强大了,个人刚刚接触.(初级菜鸟,懂的不多,往大神们指点)需求是,客户点 ...

  8. asp.net mvc添加多条数据到数据库

    mvc的视图太强大了,个人刚刚接触.(初级菜鸟,懂的不多,往大神们指点)需求是,客户点击添加按钮弹出一个框选择产品后直接添加到表单中,在表单可以自己更改产品的数量,以及一些信息.mvc表单提交的时候只 ...

  9. sql 更新列表中最老的一条数据

    今天组长给个任务说要给摄像头触发一个列表.让缓存5条数据,每次摄像头触发更新一条,丢掉最老的一条数据.原来的update是直接更新掉一条,没带缓存的.然后搞了个sql语句,是这样的: UPDATE C ...

随机推荐

  1. Android 从ImageView中获取Bitmap对象方法

    showImageView.setDrawingCacheEnabled(true); Bitmap bitmap=showImageView.getDrawingCache(); showImage ...

  2. ionic2+Angular2:套接口明细步骤,以登录功能为例

    1.在app.module.ts引用HttpModul,并在imports内引用.截图如下:   2.在src目录下新建http服务.命令行:ionic g provider HttpService ...

  3. 如何用java语言获取某个网页的源代码

    import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; public class W ...

  4. Java面向对象 集合(下)

      Java面向对象 集合(下) 知识概要:               (1)Map集合的体系结构 (2)Map集合的方法 (3)HashMap TreeMap (4)集合框架中的常用工具类 ( ...

  5. 使用hive客户端java api读写hive集群上的信息

    上文介绍了hdfs集群信息的读取方式,本文说hive 1.先解决依赖 <properties> <hive.version>1.2.1</hive.version> ...

  6. 面向对象(OOP)--OOP基础与this指向详解

      前  言            学过程序语言的都知道,我们的程序语言进化是从“面向机器”.到“面向过程”.再到“面向对象”一步步的发展而来.类似于汇编语言这样的面向机器的语言,随着时代的发展已经逐 ...

  7. windowsxp_电脑桌面显示不出来。

    问题:在工作的时候遇到电脑桌面显示不出来 解决方案: 1.结束explorer.exe进程 2.新建一个explorer.exe进程

  8. Cosmos OpenSSD--greedy_ftl1.2.0(二)

    FTL的整个流程如下: 下面先来看写的流程: 写的代码如下: if((hostCmd.reqInfo.Cmd == IDE_COMMAND_WRITE_DMA) || (hostCmd.reqInfo ...

  9. IP核之初——FIFO添加以太网MAC头部

    本文设计思路源自明德扬至简设计法.在之前的几篇博文中,由于设计比较简单,所有的功能都是用verilogHDL代码编写实现的.我们要学会站在巨人的肩膀上,这时候就该IP核登场了! 说白了,IP核就是别人 ...

  10. LeetCode 34. Search for a Range (找到一个范围)

    Given an array of integers sorted in ascending order, find the starting and ending position of a giv ...