【发布时间】:2011-11-21 02:49:23
【问题描述】:
如果您想使用MySQL Full Text Search 功能,您可以在类型为 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 索引重建?
【问题讨论】:
标签: mysql full-text-search full-text-indexing query-performance