MySQLの複合主キーのINDEXはどうですか?


12

2つ以上の列の複合主キーを作成する場合PRIMARY KEY(col1, col2, col3)。システムはINDEX各列を個別に使用しますか?

私はこの質問をしていた理由は、私たちが使用している場合ということですUNIQUE INDEX (col1, col2, col3)、それはとして機能するINDEXだけで、最初の列のために、私たちは、追加作成する必要がありINDEX、他の列に対して複数可。それが複合主キーにも当てはまるかどうかを知りたいです。

回答:


16
  1. 複合プライマリインデックスは常に、col1、col2、col3値の組み合わせが一意であることを保証します。インデックスの目的が値が一意であることを保証することである場合、あなたはそれを達成しているでしょう

  2. 複合インデックスは、列col1、col2、およびcol3の任意の組み合わせでのインデックス一致も提供します

  3. 他の列を使用せずにいずれかの列を使用して結合またはフィルタリングする場合は、col2とcol3に個別のインデックスを作成します。

  4. 私は常に数値の主キー(ビジネスアソシエーションなし)、および必要に応じて複合主キーよりも一意のインデックスを優先します。


1
良い点!次に、複合主キーはUNIQUE INDEXに似ており、行をすばやくフェッチするための2番目、3番目、...列のインデックスはありませんか?
Googlebot 2012年

1
@ssmusoke col1ポイント3の省略から、a SELECT * WHERE col1 = 10が効率的であると想定できますか?
アンディ

2
@Andy#3は、col1、col2、およびcol3の複合インデックスに追加されるため、複合インデックスが使用されます。ただし、col2、col1なしのcol3でフィルターを実行する場合は、それぞれに個別のインデックスが必要です
Stephen Senkomago Musoke

3
col1、col2、およびcol3にインデックスがあることは、col1がインデックスの最初の列であるため、SELECT * FROM col1 = 10が効率的であることを意味します。 col1なしでこれらの列のみでフィルターすると、列にもインデックスが付けられます
Stephen Senkomago Musoke '18 / 06/18

2
@PaulWasilewskiはい、確かに複合主キーが理にかなっている特別なケースがありますが、それらは単なる特別なケースです。
Stephen Senkomago Musoke 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.