使用默认方式创建全文索引1、该表已有关键词字段(对文章内容的简述) , 并以“,”作为分词符

文章插图
2、不建全文索引时搜索某个关键词
需要进行全表扫描

文章插图
3、对关键词字段创建全文索引(以 , 作为分词)my.cnf配置文件中设置innodb_ft_min_token_size , 并重启MySQL服务(最小两个字符作为一个关键词 , 默认三个字符作为一个关键词)
[mysqld]innodb_ft_min_token_size=23.1 设置自定义stopwords(即分词)USE mysql;CREATE TABLE my_stopwords(VALUE VARCHAR(30)) ENGINE = INNODB;INSERT INTO my_stopwords(VALUE) VALUE (',');SET GLOBAL innodb_ft_server_stopword_table = 'mysql/my_stopwords';~SHOW GLOBAL VARIABLES WHERE Variable_name IN('innodb_ft_min_token_size','innodb_ft_server_stopword_table');+---------------------------------+--------------------+| Variable_name | Value |+---------------------------------+--------------------+| innodb_ft_min_token_size | 2 || innodb_ft_server_stopword_table | mysql/my_stopwords |+---------------------------------+--------------------+3.2 创建全文索引alter table article add fulltext index idx_full_keyword(keywords);* [ ] Query OK, 0 rows affected, 1 warning (1 min 27.92 sec)* [ ] Records: 0 Duplicates: 0 Warnings: 13.3 剩余磁盘空间需足够 , 原表4.6G , 剩余5.7G磁盘 , 添加全文索引也会失败
文章插图
3.4 利用创建的全文索引进行查询某个关键词出现的次数
查询响应时间有了很大的提升 , 只需0.05s;使用where keywords like '%时尚%' 需要7.56s 。推荐阅读:MySQL性能优化实践(很全面 , 值得收藏)

文章插图
3.5 如需同时完全匹配多个关键词 , 用布尔全文搜索
表示完全匹配 "三里屯,北京" 的记录数
select count(*) from article where match(keywords) against('+三里屯,北京' in boolean mode);+----------+| count(*) |+----------+| 1 |+----------+1 row in set (0.06 sec)表示匹配“三里屯” 或者 “北京”的记录数select count(*) from article where match(keywords) against('三里屯,北京');+----------+| count(*) |+----------+| 8 |+----------+1 row in set (0.06 sec)3.6 创建全文索引后 , 会创建一些其它文件96K Jul 5 16:30 FTS_00000000000000a7_00000000000000c0_INDEX_1.ibd96K Jul 5 16:30 FTS_00000000000000a7_00000000000000c0_INDEX_2.ibd96K Jul 5 16:30 FTS_00000000000000a7_00000000000000c0_INDEX_3.ibd96K Jul 5 16:30 FTS_00000000000000a7_00000000000000c0_INDEX_4.ibd128K Jul 5 16:30 FTS_00000000000000a7_00000000000000c0_INDEX_5.ibd256K Jul 5 16:30 FTS_00000000000000a7_00000000000000c0_INDEX_6.ibd96K Jul 5 16:29 FTS_00000000000000a7_BEING_DELETED_CACHE.ibd96K Jul 5 16:29 FTS_00000000000000a7_BEING_DELETED.ibd96K Jul 5 16:30 FTS_00000000000000a7_CONFIG.ibd96K Jul 5 16:29 FTS_00000000000000a7_DELETED_CACHE.ibd96K Jul 5 16:29 FTS_00000000000000a7_DELETED.ibd
- 前6个表示倒排索引(辅助索引表)
- 第7 , 8个表示包含已删除文档的文档ID(DOC_ID) , 其数据当前正在从全文索引中删除
- 第9个表示FULLTEXT索引内部状态的信息
- 第10 , 11个表示包含已删除但尚未从全文索引中删除其数据的文档
推荐阅读
- utf8字符集下的比较规则
- CentOS下MySQL8.0的超详细的安装及配置文档
- 网站对搜索引擎蜘蛛不友好的10点因素
- MySQL/数据库 知识点总结
- 什么是网站权重?
- mysql数据库备份及其恢复
- 在线yum安装 Linux中安装MySQL数据库下
- 玩转Docker:十分钟搞定MySQL的安装
- 三分钟学会如何找回mysql密码
- mysql数据库13种常用函数方法总结
