Closed6

MySQLのFORCE_INDEXについて

tamaco489tamaco489

概要

  • クエリにおいて特定のインデックスを強制的に使用させるための設定。
  • 通常、MySQLのクエリオプティマイザは最適と思われるインデックスを自動的に選択するが、必ずしもそれがベストな選択とは限らないことがある。
  • FORCE INDEX を使うことで、開発者が指定したインデックスを強制的に利用させることが可能。
tamaco489tamaco489

使用例

以下は users テーブルに対して idx_last_name というインデックスを強制的に使うようMySQLに指示している。

SELECT * FROM users FORCE INDEX (idx_last_name) WHERE last_name = 'Yamada';
tamaco489tamaco489

類似の構文との違い

構文 説明
USE INDEX(...) 指定したインデックスを優先的に使うが、他の選択肢も検討する。
IGNORE INDEX(...) 指定したインデックスを無視して最適なインデックスを選ぶ。
FORCE INDEX(...) 指定したインデックスを強制的に使う。他のインデックスは無視される。
tamaco489tamaco489

注意点

  • 強制的に使わせるため、パフォーマンスが悪化する可能性もある。
  • FORCE INDEXは主に、オプティマイザの選択が不適切な場合にチューニング目的で使用する。
  • インデックスのカーディナリティや条件式との相性も考慮が必要。
tamaco489tamaco489

いつ使うべきか?

  • クエリが遅く、EXPLAINで期待するインデックスが選ばれていないとき。
  • 統計情報が不正確で、MySQLが間違った選択をするケース。
このスクラップは4ヶ月前にクローズされました