多対多のテーブルでは、各列のインデックスを作成する FK を使用する方が良いですか、(2 つの列があると仮定して) 両方のキーでクエリが実行されるため複合インデックスを使用するか、FK と Composite の両方を使用する方が良いですか?同時に?
2 に答える
速度を向上させたい場合は、RDBMS の代わりに NoSQL を使用できます。
ただし、A と B を 2 つのテーブルとして考えてみましょう。AID は A のキー、BID は B のキーです。A と B の間には多対多の関係があるため、列を持つ AB テーブルを作成します。 AID用とBID用の別のもの。主キーを作成しないと、重複が発生する可能性がありますが、これは防止する必要があります。したがって、AB の主キーが必要です。主キーが AID の場合、同じ AID の 2 つの異なるペアを挿入することはできません。AID = 1 に BID = 1 と BID = 2 の 2 つのペアがある場合、AID = 1、BID = 1 は正常に挿入されますが、AID = 1、BID = 2 を挿入しようとすると、システムはエラーをスローします。 、AID = 1 が既に存在し、主キーであるためです。結論として、AB テーブルには (AID、BID) の 2 次元キーが絶対に必要です。
それでは、外部キーに目を向けましょう。A.AID を参照する AB.AID の外部キーを作成しない場合、A テーブルからレコードを削除することができ、存在しない ID が AB に残ります。したがって、AID と BID の両方の外部キーを作成する必要があります。これは速度よりも優先度が高く、データの整合性保護の問題です。
私は両方を使用します。それらは異なる目的を果たします。複合インデックスによって、列の組み合わせが一意であることを意味する場合は、参照整合性のためにそれが必要です。また、多対多テーブルに存在する各値が、それがマップするテーブルにも存在するように、整合性のために両方の列に外部キーが必要です。これにより、確実に行う結合に使用されるインデックスが同時に作成されます。