索引重建

Exisi 2023-03-16 22:14:02
Categories: Tags:

重建 InnoDB 全文索引

  • 要使配置的更改生效,必须在修改以下任何全文索引变量后重新生成FULLTEXT索引:

 

  • innodb_ft_min_token_sizeinnodb_ft_max_token_size
  • innodb_ft_server_stopword_table
  • innodb_ft_user_stopword_table
  • innodb_ft_enable_stopword
  • ngram_token_size

 

修改innodb_ft_min_token_sizeinnodb_tt_max_token_sizengram_token_size都需要重新启动服务器。

 

  • 要重建InnoDB表的FULLTEXT索引,请使用ALTERTABLEDROPINDEXADDINDEX选项删除并重新创建每个索引。

 

在具有全文索引的表上运行 OPTIMIZE TABLE 会重建全文索引,删除已删除的文档 ID 并尽可能合并同一个词的多个条目。

要优化全文索引,请启用 innodb_optimize_fulltext_only 并运行 OPTIMIZE TABLE

示例

set GLOBAL innodb_optimize_fulltext_only=ON;
Query OK, 0 rows affected (0.01 sec)

OPTIMIZE TABLE opening_lines;

 

运行结果如下:

+----------------------+-----------+------------+-------------+
| Table          
          | Op          | Msg_type | Msg_text  |
+----------------------+-----------+------------+-------------+
| test.opening_lines
 | optimize | status      | OK             |
+----------------------+-----------+------------+-------------+
1 row in set (0.01 sec)

  • 为了避免在大表上全文索引的冗长重建时间,您可以使用Innodb_ft_num_word_optimize选项在各个阶段执行优化。

 

  • Innodb_ft_num_word_optimize选项定义了每次运行表都进行优化的单词数量。默认设置为2000,这意味着每次运行优化表都可以优化2000个单词。随后的优化表操作继续从前面的优化表操作结束的位置。

 

 

 

重建 MyISAM 全文索引

  • 如果您修改影响索引的全文变量(ft_min_word_lenft_max_word_len ft_stopword_file),或者如果您更改停止词文件本身,则必须在进行更改并重新启动服务器后重建 FULLTEXT 索引。

 

  • 要为 MyISAM 表重建 FULLTEXT 索引,执行快速修复操作就足够了:

示例

REPAIR TABLE tbl_name QUICK;

 

  • 或者,使用 ALTER TABLE。在某些情况下,这可能比修复操作更快。

 

  • 每个包含任何 FULLTEXT 索引的表都必须按刚才所示进行修复。否则,对该表的查询可能会产生不正确的结果,并且对该表的修改会导致服务器将该表视为已损坏并需要修复。

 

  • 出现此问题是因为这些参数只有服务器知道。它们不存储在 MyISAM 索引文件中。如果您修改了服务器使用的最小或最大字长或停止词文件值,为避免出现此问题,请为 myisamchk 指定与用于 mysqld 的相同的 ft_min_word_lenft_max_word_len ft_stopword_file 值。例如,如果您将最小字长设置为 3,则可以像这样使用 myisamchk 修复表:

示例

myisamchk --recover --ft_min_word_len=3 tbl_name.MYI

 

  • 为确保 myisamchk 和服务器对全文参数使用相同的值,请将每个参数都放在选项文件的 [mysqld] [myisamchk] 部分中:

 

[mysqld]
ft_min_word_len=3

[myisamchk]
ft_min_word_len=3

如果使用myisamchk执行修改MyISAM表索引的操作(如修复或分析),则除非另有指定,否则将使用最小字长、最大字长和stopword文件的默认全文参数值重建FULLTEXT索引。这可能导致查询失败。

 

 

 

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