Mysql全文索引性能测试对比

文章通过测试展示了MySQL5.6之后引入的全文索引在应对大量数据时,相比于%xxx%模糊查询的显著性能提升。测试涵盖了不同数据规模下的单字段和多字段全文索引建立时间以及表空间占用。结果显示,全文索引能有效提高搜索效率,而单字段索引在效率上优于多字段索引。此外,文章还提到了MySQL对英文和中文全文索引的支持情况及其配置调整。

在关系型数据库中,使用like模糊查询,如果是 'xxx%'头匹配方式,字段索引不会失效,性能能接受;但如果是 '%xxx%'全文匹配方式,索引会失效,在数据量大的情况下,通过此种方式查询的效率极低。此时可通过全文索引(Full-Text Search)来进行。
Mysql在5.6之后提供全文索引,本文主要记录测试全文索引效率。

Mysql全文索引基本情况

1、Mysql在5.6之后基于MyISAM引擎提供全文索引,在MySQL 5.7.6之前,全文索引只支持英文全文索引,不支持中文全文索引
2、Mysql5.7开始 innoDb开始支持全文索引,且从MySQL 5.7.6开始,MySQL内置了ngram全文解析器,用来支持中文、日文、韩文分词。

测试全文索引效率

测试前说明

1、为了对比,本次测试用了10万、100万、1000万数量级做对比测试。
2、测试数据库在服务器(ctrix虚拟机2vcpu,8G内存),本次使用版本5.7.13;客户端在PC上用navicat工具;网络千M网。
3、测试是基于我使用的硬件情况,因此反映性能的具体指标供参考。
4、预先准备好数据,我是采用了《简爱》全本中英文,采用随机截断不同长度文本方式分别从里面收取10万、100万、1000万数据。
5、my.cnf配置(配置完了别忘了重启mysql)如下:

[mysqld]
#英文分词长度默认为4,<4通常不建索引;英文单词长度<4的通常查询不到
ft_min_word_len = 4  
 #中文分词长度位2,每个字都可以查出
ngram_token_size=2

测试步骤

建表(见如下语句)
CREATE TABLE ft_bigdata10 (
  id int(11) NOT NULL AUTO_INCREMENT,
  tenant_id char(6) NOT NULL ,
  code_list Text DEFAULT NULL, -- 非英文单词的字符串,用','隔开,每个串为单词+','隔开,每个单词16个字符随机组成
  en_cnword TEXT DEFAULT NULL, -- 中英文文段落(从简爱 中英文对照版随机抽取)
  PRIMARY KEY (id) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ;
CREATE TABLE ft_bigdata100 (
  id int(11) NOT NULL AUTO_INCREMENT,
  tenant_id char(6) NOT NULL ,
  code_list Text DEFAULT NULL, -- 非英文单词的字符串,用','隔开,每个串为单词+','隔开,每个单词16个字符随机组成
  en_cnword TEXT DEFAULT NULL, -- 中英文文段落(从简爱 中英文对照版随机抽取)
  PRIMARY KEY (id) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ;
CREATE TABLE ft_bigdata1000 (
  id int(11) NOT NULL AUTO_INCREMENT,
  tenant_id char(6) NOT NULL ,
  code_list Text DEFAULT NULL, -- 非英文单词的字符串,用','隔开,每个串为单词+','隔开,每个单词16个字符随机组成
  en_cnword TEXT DEFAULT NULL, -- 中英文文段落(从简爱 中英文对照版随机抽取)
  PRIMARY KEY (id) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ;
导入数据

由于数据量大,将数据加

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐享技术

每一个打赏,都是对我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值