InnoDB
テーブルのクエリーをチューニングするには、各テーブルに適切なインデックスのセットを作成します。詳細は、セクション8.3.1「MySQL のインデックスの使用の仕組み」を参照してください。InnoDB
インデックスに関する次のガイドラインに従います。
各
InnoDB
テーブルには主キー がある (それをリクエストするかしないかに関係なく) ため、もっとも重要で緊急を要するクエリーで使用されるカラムとして、テーブルごとに主キーカラムのセットを指定します。主キーのカラム値は各セカンダリインデックスに複製されるため、あまり多く、長すぎるカラムを指定しないでください。インデックスに不要なデータが含まれていると、このデータを読み取る I/O とそれをキャッシュするメモリーによって、サーバーのパフォーマンスとスケーラビリティーが低下します。
各クエリーで使用できるインデックスは 1 つだけであるため、カラムごとに個別のセカンダリインデックスを作成しないでください。ほんの少数の異なる値を持ち、めったにテストされないカラムへのインデックスは、どのクエリーにも役立たない可能性があります。同じテーブルに対して多くのクエリーがあり、カラムのさまざまな組み合わせをテストする場合、多数の単一カラムインデックスよりも、少数の連結されたインデックスを作成してみてください。インデックスに結果セットに必要なすべてのカラムが含まれている (カバリングインデックスと呼ばれます) 場合、クエリーはテーブルデータをまったく読み取らなくても済む可能性があります。
インデックス設定されたカラムに
NULL
値が含まれることがない場合は、テーブルの作成時に、それをNOT NULL
として宣言します。オプティマイザは、各カラムにNULL
値が含まれているかどうかを知っていれば、クエリーに使用するためにもっとも効率的なインデックスをより適切に判断できます。MySQL 5.6.4 以上では、セクション14.13.14「InnoDB の読み取り専用トランザクションの最適化」の技法を使用して、
InnoDB
テーブルの単一クエリートランザクションを最適化できます。-
頻繁に更新されないテーブルに対して、たびたび繰り返しのクエリーを行う場合、クエリーキャッシュを有効にします。
[mysqld] query_cache_type = 1 query_cache_size = 10M