3

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 インデックスの再構築を待っている可能性があると推測した理由です。

4

1 に答える 1

1

... AGAINST('"building surveyor"')どこにでも散らばっている2つの単語の代わりに、そのフレーズを取得するために使用することを検討してください.

MyISAM または InnoDB を使用していますか? それらは異なる働きをします。

行が挿入/更新されると、MyISAM は FT インデックスを更新すると思います。

InnoDB は、変更をキューに入れ、最終的にそれらをディスクに書き込むと思います。これにより、通常、MyISAM よりも書き込みが高速になります。

明示的に要求された場合を除き、どちらのエンジンもインデックスを再構築しません。

于 2015-04-21T02:09:33.443 に答える