MySQL 8.0 InnoDB全文索引可用于生产环境吗

暂不建议。

  • 0. 背景介绍

  • 1. 环境准备

  • 2. 导入数据

  • 3. 全文搜索

  • 4. 放弃治疗

0. 背景介绍

MySQL从5.6版本开始,InnoDB也支持全文索引(fulltext),从5.7开始新增ngram插件以支持对中文的全文索引,以及用MeCab解析日文。为了验证全文搜索的效果,我做了个简单的测试。

1. 环境准备

本次测试我采用的是MySQL 8.0.19版本。另外,即便有了ngram这个中文分词插件,但其实分词效果还是不太理想,所以我修改了几个参数:

ngram_token_size = 1
ft_min_word_len = 1
innodb_ft_min_token_size = 1

也就是最短的分词长度为1。

另外,innodb-buffer-pool-size我设置为10GB。

创建测试表:

[root@yejr.run]> CREATE TABLE `t_fulltxt` (
  id int unsigned NOT NULL,
  author varchar(100) NOT NULL,
  title varchar(100) NOT NULL,
  summary varchar(255) NOT NULL,
  bdata longtext,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `k1` (`title`,`summary`,`bdata`) WITH PARSER ngram
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

2. 导入数据

我在某小说网站上下载了一批数据,并每个文件进行切分,保证每条记录里的中文数据不超过96KB,这样一个大文件就会被切分成多次导入。最后,共导入了约14万条数据,看下表统计信息:

[root@yejr.run]> show table status\G
           Name: t_fulltxt
         Engine: InnoDB
        Version: 10
     Row_format: Dynamic
           Rows: 136554
 Avg_row_length: 109696   --行平均长度107KB,太大了
    Data_length: 14574764032
Max_data_length: 0
   Index_length: 5275648
      Data_free: 5242880
 Auto_increment: NULL
    Create_time: 2020-04-29 20:27:44
    Update_time: 2020-04-30 01:25:20
 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值