innodb_ft_min_token_size = 1 性能影响

Chr*_*nch 6 mysql full-text-search

如果我将 innodb_ft_min_token_size =1 从默认值 3 更改为 1,这会导致更多的磁盘使用吗?搜索有性能问题吗?

我希望能够在单词中的 1 个字符中使用全文搜索。

此外,一旦我进行了此更改,我将如何重建索引?这会给服务器带来很多负载吗?

Ric*_*mes 6

没有那么多 1 和 2 个字母的单词,所以空间变化可能不是很大。

修改 innodb_ft_min_token_size、innodb_ft_max_token_size 或 ngram_token_size [in my.cnf] 需要重新启动服务器。

要为 InnoDB 表重建 FULLTEXT 索引,请使用带有 DROP INDEX 和 ADD INDEX 选项的 ALTER TABLE 删除并重新创建每个索引。

-- https://dev.mysql.com/doc/refman/8.0/en/fulltext-fine-tuning.html

的“范围”innodb_ft_min_token_size是“全局”。也就是说,它适用于所有 InnoDB FT 索引。

-- https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_ft_min_token_size

重新创建索引将读取整个表并重建FT索引,这将在一段时间内将表“锁定”在某个级别。重建的时间将大致与表的大小成正比。它会消耗一堆额外的磁盘空间,直到它完成。(表和所有索引将被复制,至少 FT 索引将被重建。)

如果你有一千行,没什么大不了的。如果您有十亿行,您将需要很长时间的“停机时间”。

更改 innodb_ft_max_token_size 后,我会害怕做一个简短的通配符测试,如

AGAINST('a*' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)

如果您有测试服务器,请尝试一下。

我注意到文档建议中文等的值为 1。