にインデックスを持つテーブルがあるとします(field1,field2,field3)
。でクエリを実行しますWHERE field2 = A AND field3 = B
。この場合、MySQL は前述のキーを使用しません。質問は、このインデックスを使用する RDBMS はありますか? つまり、効果的に使用しますか?
PS テーブルに余分なキーを追加するように言わないでください。上記の機能をサポートする RDBMS があれば知りたいだけです。
前もって感謝します。
明らかな問題に対する最も賢明な答えは、別のインデックスを作成することです。
create index on table_name (field2, field3);
MySQL のオプティマイザーが、あなたが記述したクエリにそのインデックスを使用しないことにしたとしたら、私は驚くでしょう。
ですから、MySQL がこの動作をサポートしていないとあなたが考える理由が (すみません、質問を読み間違えました)EXPLAIN
わかりません。
あなたは正しいです:マルチキーインデックスに関するMySQLドキュメントから:
カラムがインデックスの左端のプレフィックスを形成していない場合、MySQL はインデックスを使用してルックアップを実行できません。次に示す SELECT ステートメントがあるとします。
SELECT * FROM tbl_name WHERE col2=val2 AND col3=val3;
(col1、col2、col3) にインデックスが存在する場合、(col2、col3) は (col1、col2、col3) の左端のプレフィックスではないため、上記のクエリにはインデックス付きの列が含まれます。
別のインデックスを追加することに反対している場合 (他の人が提案しているように)、MySQL に対する私の唯一の提案は、おそらく 2 つの単一列インデックスを作成し、最新バージョンの MySQL で利用できるインデックス マージの最適化を利用することです。それがより効率的かどうかは、これらの個々のインデックスのカーディナリティと、残りのクエリ負荷がどのように見えるかによって異なります。