MySQL 5.7 innodb全文索引

  由于模糊搜索的需求越来越多,所以在从库上创建全文索引来应付各种搜索需求。现在创建一个用户名的全文搜索,全表大小为1100W条记录左右。

1、表结构查询

mysql> desc ucenter_member;
+------------------+------------------+------+-----+------------+----------------+
| Field            | Type             | Null | Key | Default    | Extra          |
+------------------+------------------+------+-----+------------+----------------+
| id               | int(10) unsigned | NO   | PRI | NULL       | auto_increment |
| nickname         | char(20)         | YES  | MUL |            |                |
| devicetoken      | varchar(60)      | NO   | MUL |            |                |
| version          | char(10)         | YES  |     |            |                |
| app_type         | tinyint(1)       | YES  |     | 0          |                |
| password         | char(32)         | NO   |     | NULL       |                |
| salt             | char(4)          | NO   |     | NULL       |                |
| mobile           | varchar(13)      | YES  | MUL | NULL       |                |
| avatar           | int(11)          | NO   |     | 0          |                |
| sex              | tinyint(1)       | NO   |     | 0          |                |
| birthday         | date             | YES  |     | 0000-00-00 |                |
+------------------+------------------+------+-----+------------+----------------+
11 rows in set (0.00 sec)

必要的参数设置

mysql> show variables like ‘ft_min_word_len‘;
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| ft_min_word_len | 1     |
+-----------------+-------+
1 row in set (0.00 sec)

  

2、添加全文索引

mysql> alter table ucenter_member add fulltext index ix_ft_ucenter_member_nickname(nickname) with parser ngram;

  

3、添加过程(添加全文整个过程要很长的时间,并且这段时间里所有业务将不能执行)

主从复制将会停止mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.200
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mybin.000750
          Read_Master_Log_Pos: 746166232
               Relay_Log_File: relay-bin.002247
                Relay_Log_Pos: 17345090
        Relay_Master_Log_File: mybin.000750
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table: sys.%,mysql.%,information_schema.%,performance_schema.%
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 736231270
              Relay_Log_Space: 27280306
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 1104
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
                  Master_UUID: 5a00f33b-8551-11e5-9122-0016310207a0
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Waiting for dependent transaction to commit
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set: 5a00f33b-8551-11e5-9122-0016310207a0:1451340674-1451398198
            Executed_Gtid_Set: 5a00f33b-8551-11e5-9122-0016310207a0:1-1451377326,
9905e5a2-815d-11f5-8244-00163f004aa2:1-84
                Auto_Position: 1
         Replicate_Rewrite_DB:
                 Channel_Name:
1 row in set (0.00 sec)

查询进程

mysql> show processlist;
+----+-------------+-----------+--------+---------+------+---------------------------------------------+------------------------------------------------------------------------------------------------------+
| Id | User        | Host      | db     | Command | Time | State                                       | Info                                                                                                 |
+----+-------------+-----------+--------+---------+------+---------------------------------------------+------------------------------------------------------------------------------------------------------+
|  1 | system user |           | NULL   | Connect | 1673 | Waiting for master to send event            | NULL                                                                                                 |
|  2 | system user |           | NULL   | Connect | 1123 | Waiting for dependent transaction to commit | NULL                                                                                                 |
|  3 | system user |           | NULL   | Connect | 1123 | Waiting for table metadata lock             | NULL                                                                                                 |
|  4 | system user |           | NULL   | Connect | 1195 | Waiting for an event from Coordinator       | NULL                                                                                                 |
|  5 | system user |           | NULL   | Connect | 1673 | Waiting for an event from Coordinator       | NULL                                                                                                 |
|  6 | system user |           | NULL   | Connect | 1673 | Waiting for an event from Coordinator       | NULL                                                                                                 |
|  9 | root        | localhost | peiyin | Query   | 1123 | altering table                              | alter table ucenter_member add fulltext index ix_ft_ucenter_member_nickname(nickname) with parser ng |
| 14 | root        | localhost | NULL   | Query   |    0 | starting                                    | show processlist                                                                                     |
+----+-------------+-----------+--------+---------+------+---------------------------------------------+------------------------------------------------------------------------------------------------------+
8 rows in set (0.00 sec)
  

  

4、完成创建

mysql> alter table ucenter_member add fulltext index ix_ft_ucenter_member_nickname(nickname) with parser ngram;
Query OK, 0 rows affected, 1 warning (31 min 7.29 sec)
Records: 0  Duplicates: 0  Warnings: 1

5、查询索引

按布尔全文搜索模式查询

mysql> select version,nickname from ucenter_member where match(nickname) against(‘中国‘ in boolean mode) limit 10;
+---------+--------------------------------------------------+
| version | nickname                                         |
+---------+--------------------------------------------------+
| 4.63    | 我爱中国 立场中国                                |
|         | 中国联通一窍不通中国移动一动不动                 |
| 4.21    | 姜振光(中国·北科、中国·沪航)                   |
| 4.63    | 我是中国人,我爱中国                             |
| 4.40    | 中国人中国心                                     |
| 4.52    | 中国特警――中国青年财神爷                         |
| 4.52    | 完美中国,中国完美                               |
| 4.81    | 中国梦、梦中国                                   |
| 4.52    | 中国梦~我的梦                                   |
|         | A   中国梦                                       |
+---------+--------------------------------------------------+
10 rows in set (0.01 sec)
mysql> select version,nickname from ucenter_member where match(nickname) against(‘中国梦想‘ in boolean mode) limit 10;
Empty set (0.03 sec)

  

按自然语言搜索模式查询

mysql> select version,nickname from ucenter_member where match(nickname) against(‘中国‘ in natural language mode) limit 10;
+---------+--------------------------------------------------+
| version | nickname                                         |
+---------+--------------------------------------------------+
| 4.63    | 我爱中国 立场中国                                |
|         | 中国联通一窍不通中国移动一动不动                 |
| 4.21    | 姜振光(中国·北科、中国·沪航)                   |
| 4.63    | 我是中国人,我爱中国                             |
| 4.40    | 中国人中国心                                     |
| 4.52    | 中国特警――中国青年财神爷                         |
| 4.52    | 完美中国,中国完美                               |
| 4.81    | 中国梦、梦中国                                   |
| 4.52    | 中国梦~我的梦                                   |
|         | A   中国梦                                       |
+---------+--------------------------------------------------+
10 rows in set (0.01 sec)

mysql> select version,nickname from ucenter_member where match(nickname) against(‘中国梦想‘ in natural language mode) limit 10;
+------------+--------------------------------------------------+
| version    | nickname                                         |
+------------+--------------------------------------------------+
| 4.81       | 中国梦、梦中国                                   |
| 4.63       | 中国梦我的梦,我的梦想是行业顶尖                 |
| 4.52       | 中国梦~我的梦                                   |
|            | A   中国梦                                       |
|            | 中国梦                                           |
| 3.17       | 中国梦                                           |
| 3.171      | AST中国梦                                        |
| 3.20201505 | 中国梦  红楼梦                                   |
| 3.211      | 中国梦                                           |
| 4.63       | 中国梦                                           |
+------------+--------------------------------------------------+
10 rows in set (0.05 sec)

6、产生的文件

[[email protected] mydbs]# ls -alh FTS*
-rw-r----- 1 mysql mysql 104M Oct 26 11:47 FTS_0000000000000353_0000000000000710_INDEX_1.ibd
-rw-r----- 1 mysql mysql  17M Oct 26 11:47 FTS_0000000000000353_0000000000000710_INDEX_2.ibd
-rw-r----- 1 mysql mysql  14M Oct 26 11:47 FTS_0000000000000353_0000000000000710_INDEX_3.ibd
-rw-r----- 1 mysql mysql  40M Oct 26 11:47 FTS_0000000000000353_0000000000000710_INDEX_4.ibd
-rw-r----- 1 mysql mysql  44M Oct 26 11:48 FTS_0000000000000353_0000000000000710_INDEX_5.ibd
-rw-r----- 1 mysql mysql 212M Oct 26 11:47 FTS_0000000000000353_0000000000000710_INDEX_6.ibd
-rw-r----- 1 mysql mysql  96K Oct 26 11:43 FTS_0000000000000353_BEING_DELETED_CACHE.ibd
-rw-r----- 1 mysql mysql  96K Oct 26 11:42 FTS_0000000000000353_BEING_DELETED.ibd
-rw-r----- 1 mysql mysql  96K Oct 26 11:41 FTS_0000000000000353_CONFIG.ibd
-rw-r----- 1 mysql mysql  96K Oct 26 11:40 FTS_0000000000000353_DELETED_CACHE.ibd
-rw-r----- 1 mysql mysql  96K Oct 26 12:09 FTS_0000000000000353_DELETED.ibd

  

  

时间: 2024-08-08 12:13:41

MySQL 5.7 innodb全文索引的相关文章

《mysql技术内幕 InnoDB存储引擎(第二版)》阅读笔记

一.mysql架构 mysql是一个单进程多线程架构的数据库. 二.存储引擎 InnoDB: 支持事务 行锁 读操作无锁 4种隔离级别,默认为repeatable 自适应hash索引 每张表的存储都是按主键的顺序记性存放 支持全文索引(InnoDB1.2.x - mysql5.6) 支持MVCC(多版本并发控制)实现高并发 MyISAM: 不支持事务 表锁 支持全文索引 三.InnoDB体系架构 1.后台线程 Master Thread 负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性 IO

MySQL技术内幕-InnoDB存储引擎-读书笔记(一)

MySQL技术内幕-InnoDB存储引擎-读书笔记(一) 作为php开发,使用mysql总是少不了的 博客链接 http://itsong.net/articles/466.html 第一章 MySQL体系结构和存储引擎 MySQL被设计为一个单进程多线程架构的数据库 ./mysql --help | grep my.cnf 可以查看mysql数据库实例启动时,它会在哪些位置查找配置文件. 配置文件中有一个datadir参数,指定了数据库所在的路径.默认为/usr/local/mysql/dat

MySql MyISAM和InnoDB的区别

MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的 顺序访问方法) 的缩写,它是存储记录和文件的标准方法.与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具. MyISAM表格可以被压缩,而且它们支持全文搜索.它们不是事务安全的,而且也不支持外键.如果事物回滚将造成不完全回滚,不具有原子性.如果执行大量 的SELECT,MyISAM是更好的选择. InnoDB:这种类型是事务安全的.它与BD

MySql中启用InnoDB数据引擎简介 以及 InnoDB与 MYISAM的区别和联系

1.存储引擎是什么? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能.这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型).MySql默认配置了许多不同的存储引擎,可以预先设置或者在MySql服务器中启用. 2.MYSQL支持的数据引擎 MyISAM:默认的MySQL插件式存储引擎,它是

MySQL · 引擎特性 · InnoDB 崩溃恢复过程

MySQL · 引擎特性 · InnoDB 崩溃恢复过程 在前面两期月报中,我们详细介绍了 InnoDB redo log 和 undo log 的相关知识,本文将介绍 InnoDB 在崩溃恢复时的主要流程. 本文代码分析基于 MySQL 5.7.7-RC 版本,函数入口为 innobase_start_or_create_for_mysql,这是一个非常冗长的函数,本文只涉及和崩溃恢复相关的代码. 在阅读本文前,强烈建议翻阅我们之前的两期月报:1. MySQL · 引擎特性 · InnoDB

MySQL技术内幕-InnoDB存储引擎-读书笔记(二)

MySQL技术内幕-InnoDB存储引擎-读书笔记(二) 作为php开发,使用mysql总是少不了的 系列文章博客链接 http://itsong.net/articles/466.html 第三章 文件 mysql与innodb几个类型的文件 参数文件,配置路径.初始化参数.内存大小等 日志文件,包括错误日志,二进制日志,慢查询日志,查询日志 socket文件,用unix域套接字,unix domain socket来进行连接时需要的文件,这一般是本机连接,比通常tcp快 pid文件,进程id

mysql技术内幕InnoDB存储引擎-阅读笔记

mysql技术内幕InnoDB存储引擎这本书断断续续看了近10天左右,应该说作者有比较丰富的开发水平,在源码级别上分析的比较透彻.如果结合高可用mysql和高性能mysql来看或许效果会更好,可惜书太厚,还在啃当中,希望能早点读完……. 应该说与oracle相比,mysql数据库还是相对比简单,以后还是深入学习下oracle去. 搞数据库也比搞应用运维相对单纯,不用知道各种应用架构,不用写各种脚本工具,只要掌握这个软件就足够了.当然希望自己的知识还是全面一些好.

MySQL存储引擎 InnoDB/ MyISAM/ MERGE/ BDB 的区别

MyISAM:默认的MySQL插件式存储引擎,它是在Web.数据仓储和其他应用环境下最常使用的存储引擎之一.注意,通过更改 STORAGE_ENGINE 配置变量,能够方便地更改MySQL服务器的默认存储引擎. InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持. BDB:可替代InnoDB的事务引擎,支持COMMIT.ROLLBACK和其他事务特性. Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问. Merge:允许MyS

mysql 默认引擎innodb 初探(二)

写在前 本篇博客承接上一篇 mysql 默认引擎innodb 初探(一)进行对mysql数据库 innodb存储引擎进行探索 mysql默认存储引擎 innodb简介 Innodb是第一个完整支持ACID事务的mysql存储引擎(BDB是第一个支持事务的mysql存储引擎,目前已经停止开发): 主要特点是 支持行锁,MVCC,事务,外键及一致性非锁读,可以有效利用CPU和内存: 各版本对比如下: tips : 如果不支持多回滚段,Innodb最大支持并发事务量被限制为1023 innodb体系架