如果您想使用MySQL 全文搜索功能,您可以在类型为 VARCHAR 的字段上定义全文索引。由于行是插入和更新的,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 索引重建?