MySQL 全文検索機能を使用する場合は、VARCHAR タイプのフィールドに全文索引を定義します。行は INSERT および UPDATE されるため、mysql はインデックスを最新の状態に保つ必要があります。私の質問は、MySQL が FTS インデックスを再構築するのはいつですか?
- A) インデックスに影響を与える INSERT または UPDATE が発生した直後。
- B) 最近 UPDATE または INSERT の影響を受けたインデックスを必要とする最初の SELECT が実行されるとき。
- C) 他の何か。
不必要な背景情報: 私の経験では、オプション B を考えているようです。これは正しいですか? 全文検索を実行するランダムな低速クエリが突然発生し、一部のクエリが低速で他のクエリがそうでない理由がわからないため、質問します。私の推測では、mysql が FTS インデックスを再構築するのを待っている場合、クエリが遅くなる可能性がありますが、これが mysql の仕組みかどうかはわかりません。ランダムな低速クエリの例 (通常、同じクエリは 1 秒未満で実行されます)。低速ログに低速の 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 インデックスの再構築を待っている可能性があると推測した理由です。