インデックスの一般的な経験則は、WHERE
で使用される任意のフィールドに1つを叩くことです。 またはJOIN
句。
そうは言っても、実行できる最適化がいくつかあります。 知っている場合 フィールドの特定の組み合わせが特定のテーブルのWHEREで使用される唯一の組み合わせである場合、それらのフィールドだけに単一のマルチフィールドキーを作成できます。例:
INDEX (field1, field2, field5)
v.s.
INDEX (field1),
INDEX (field2),
INDEX (field5)
マルチフィールドインデックスは、多くの場合、複数のインデックスをスキャンする必要がある場合よりも効率的です。欠点は、マルチフィールドインデックスは、問題のフィールドが実際にWHERE句で使用されている場合にのみ使用できることです。
サンプルクエリでは、element
およびfield_id
3つのインデックスすべてに含まれている場合は、それらを専用のインデックスに分割する方がよい場合があります。これらが変更可能なフィールドである場合は、専用のインデックスを保持することをお勧めします。例えばfield_id
を変更する必要がある場合 まとめて、DBは3つの異なるインデックスを更新する必要があります。専用のものを1つだけ更新します。
しかし、それはすべてベンチマークに帰着します。さまざまなインデックス設定を使用して特定の設定をテストし、どれが最適かを確認します。親指のルールは便利ですが、100%は機能しません。