MySQL何时重建FTS索引?

时间:2011-09-20 13:42:13

标签: mysql full-text-search full-text-indexing query-performance

如果要使用MySQL Full Text Search功能,请在类型为VARCHAR的字段上定义全文索引。由于行是INSERTed和UPDATEd,mysql必须使索引保持最新。我的问题是: MySQL什么时候重建FTS索引?

  • A)发生INSERT或UPDATE后立即影响索引。
  • B)运行第一个SELECT时,需要最近受UPDATE或INSERT影响的索引。
  • C)别的。

不必要的背景信息:我的经验似乎认为选项B.这是对的吗?我问,因为我一直在经历突然的随机慢查询,这些查询执行全文搜索,我不知道为什么有些慢,而不是其他。我的预感是,如果等待mysql重建FTS索引,查询可能会很慢,但我不知道这是否是mysql的工作方式。随机慢查询的示例(通常在一秒钟内运行相同的查询),慢速日志中没有缓慢的UPDATE或INSERT:

# Query_time: 61.775612  Lock_time: 10.110924 Rows_sent: 20  Rows_examined: 222498
SELECT SQL_CALC_FOUND_ROWS id
FROM members
WHERE
    AND MATCH (bio,profile_text,name) AGAINST ('building surveyor')
    AND MATCH (town, postcode, country) AGAINST ('united kingdom, liverpool');

注意Lock_time。我在慢速日志中看不到任何其他INSERT或UPDATE,所以我不确定它在等什么。这就是为什么我猜测它可能正在等待FTS索引重建?

1 个答案:

答案 0 :(得分:1)

考虑使用... AGAINST('"building surveyor"')来获取该词组,而不是分散在任何地方的那两个词。

您使用的是MyISAM还是InnoDB?他们的工作方式不同。

我认为,MyISAM在插入/更新行时更新 FT索引。

我认为,InnoDB会将更改排队,最终将它们写入磁盘。这通常使写入速度比MyISAM快。

除非明确要求,否则Engine 都不会重建索引。