如果我将 innodb_ft_min_token_size =1 从默认值 3 更改为 1,这会导致更多的磁盘使用吗?搜索有性能问题吗?
我希望能够在单词中的 1 个字符中使用全文搜索。
此外,一旦我进行了此更改,我将如何重建索引?这会给服务器带来很多负载吗?
最佳答案
没有那么多 1 和 2 个字母的单词,所以空间变化可能不是很大。
Modifying innodb_ft_min_token_size, innodb_ft_max_token_size, or ngram_token_size [in my.cnf] requires restarting the server.
To rebuild FULLTEXT indexes for an InnoDB table, use ALTER TABLE with the DROP INDEX and ADD INDEX options to drop and re-create each index.
-- 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)
如果您有测试服务器,请尝试一下。我注意到文档建议中文等的值为 1。
关于mysql - innodb_ft_min_token_size = 1 性能影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60143351/