MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  InnoDB クエリーの最適化

8.5.6 InnoDB クエリーの最適化

InnoDB テーブルのクエリーをチューニングするには、各テーブルに適切なインデックスのセットを作成します。 詳細は、セクション8.3.1「MySQL のインデックスの使用の仕組み」を参照してください。 InnoDB インデックスに関する次のガイドラインに従います。

  • InnoDB テーブルには主キー がある (それをリクエストするかしないかに関係なく) ため、もっとも重要で緊急を要するクエリーで使用されるカラムとして、テーブルごとに主キーカラムのセットを指定します。

  • 主キーのカラム値は各セカンダリインデックスに複製されるため、あまり多く、長すぎるカラムを指定しないでください。 インデックスに不要なデータが含まれていると、このデータを読み取る I/O とそれをキャッシュするメモリーによって、サーバーのパフォーマンスとスケーラビリティーが低下します。

  • 各クエリーで使用できるインデックスは 1 つだけであるため、カラムごとに個別のセカンダリインデックスを作成しないでください。 ほんの少数の異なる値を持ち、めったにテストされないカラムへのインデックスは、どのクエリーにも役立たない可能性があります。 同じテーブルに対して多くのクエリーがあり、カラムのさまざまな組み合わせをテストする場合、多数の単一カラムインデックスよりも、少数の連結されたインデックスを作成してみてください。 インデックスに結果セットに必要なすべてのカラムが含まれている (カバリングインデックスと呼ばれます) 場合、クエリーはテーブルデータをまったく読み取らなくても済む可能性があります。

  • インデックス設定されたカラムに NULL 値が含まれることがない場合は、テーブルの作成時に、それを NOT NULL として宣言します。 オプティマイザは、各カラムに NULL 値が含まれているかどうかがわかっている場合、クエリーに最も効果的なインデックスを判断できます。

  • セクション8.5.3「InnoDB の読み取り専用トランザクションの最適化」 の手法を使用して、InnoDB テーブルの単一クエリートランザクションを最適化できます。


関連キーワード:  インデックス, テーブル, InnoDB, クエリー, カラム, ステートメント, 結合, データ, 状態, データベース