5

(a、b)に複合インデックスがある場合、「a」のみに関係するクエリは引き続き複合インデックスを使用することを理解しています(ただし、「b」に関係するクエリは使用しません)

私の質問は、(a, b) インデックスがある場合、「a」に単一列インデックスを持つ正当な理由があるかどうかです。私が読んだものは、(a,b) インデックスが a の完全な代替物なのか、単に「何もないよりはまし」なインデックスなのか、漠然としているように見えました。

これは、a と a,b の両方でフィルタリングを行うことを前提としています。書き込みパフォーマンスを低下させているインデックスが多すぎるテーブルがあり、インデックスを削除する前に再確認したいと考えています。

また、InnoDb と MyISAM のどちらを使用しているかによって、この回答は変わりますか? 関連するテーブルは MyISAM ですが、テーブルのほとんどは InnoDb です。

4

2 に答える 2

4

(a,b) インデックスは、「a」のみを含むクエリも処理し、(a) だけのインデックスは必要ありません。

ドキュメントから:

テーブルに複数列のインデックスがある場合、オプティマイザーはインデックスの左端のプレフィックスを使用して行を検索できます。

たとえば、(col1、col2、col3) に 3 列のインデックスがある場合、(col1)、(col1、col2)、および (col1、col2、col3) にインデックス付き検索機能があります。

于 2011-02-16T22:39:08.093 に答える
2

私の質問は、(a, b) インデックスがある場合、「a」に単一列インデックスを持つ正当な理由があるかどうかです。

いいえ、(a,b) にインデックスがある場合、(a) にインデックスを付ける理由はありません。

于 2011-02-16T22:38:19.637 に答える