1. ホーム
  2. sql

[解決済み] MySQLの2つのシングルカラムインデックスと1つのツーカラムインデックス?

2022-06-22 13:31:05

質問

次のようなことに直面し、何がベストプラクティスなのかがわかりません。

次の表を考えてみましょう(大きくなります)。

id PK|giver_id FK|recipient_id FK|date

私は InnoDB を使用しており、私が理解したところでは、2 つの外部キー列に対して自動的にインデックスが作成されます。しかし、私は、特定の組み合わせに一致する必要がある多くのクエリを実行するつもりです。

SELECT...WHERE giver_id = x AND recipient_id = t .

このような組み合わせは、それぞれテーブルの中で一意になります。

これらの列の上に2列のインデックスを追加することで何か利点はありますか、それとも理論的には2つの個別のインデックスで十分/同じでしょうか?

どのように解決するのですか?

2つの単一列インデックスがある場合、例ではそのうちの1つだけが使用されます。

2列のインデックスを持つ場合、クエリはより速くなるかもしれません(測定する必要があります)。2列のインデックスは1列のインデックスとして使用することもできますが、最初にリストされた列に対してのみ使用されます。

時には、(A,B)に対するインデックスと(B)に対する別のインデックスを持つことが有用な場合があります。これは、どちらか、もしくは両方の列を使用するクエリを高速化しますが、もちろん、より多くのディスクスペースを使用します。

インデックスを選択する際には、挿入、削除、更新への影響も考慮する必要があります。インデックスが多ければ多いほど、更新は遅くなります。