MySQLは、使用可能なインデックスを考慮して、特定のクエリの実行プランを選択しますか、それとも最初に実行プランを選択し、使用可能な場合はインデックスを使用しますか?
モチベーション:どのインデックスが役立つかを決定したいと思います。典型的なクエリがいくつかあります。だから私は2つの可能な戦略を想像することができます:
私のDBはそれほど大きくないので、インデックスを操作する余裕があります。私は現在InnoDBを使用していますが、必要に応じてMyISAMなどに切り替えることができます。
MySQLのオプティマイザは、使用可能なインデックスのみを調べます。
5.6には例外があります。FROM ( SELECT ... ) JOIN ( SELECT ... ) ...
などのサブクエリがある場合、作成される一時テーブルにインデックスはありません。これは、ひどいパフォーマンスにつながるものでした。これで、オプティマイザはさまざまなインデックスを試し、tmpテーブルに最適なインデックスを作成します。 「複合」インデックスではなく、単一列のインデックスのみを探すのではないかと思います。
InnoDBは最近最も注目されています。 MyISAMには、裏技はありません。
私の SELECTを指定して最高のインデックスを作成するためのクックブック を試してください。それはあなたにいくつかの誤ったスタートを節約するかもしれません。