回答:
明確にするために:テーブルは最大で1つの主キーを持つことができます。主キーは、(そのテーブルの)1つ以上の列で構成されます。主キーが2つ以上の列で構成される場合、複合主キーと呼ばれます。次のように定義されます。
CREATE TABLE voting (
QuestionID NUMERIC,
MemberID NUMERIC,
PRIMARY KEY (QuestionID, MemberID)
);
ペア(QuestionID、MemberID)はテーブルに対して一意である必要があり、どちらの値もNULLにすることはできません。次のようなクエリを実行すると、
SELECT * FROM voting WHERE QuestionID = 7
主キーのインデックスを使用します。ただし、これを行う場合:
SELECT * FROM voting WHERE MemberID = 7
複合インデックスを使用するには、「左」からすべてのキーを使用する必要があるためです。インデックスがフィールド(A、B、C)にあり、条件がBおよびCにある場合、そのクエリではそのインデックスは役に立ちません。したがって、(QuestionID、MemberID)および(MemberID、QuestionID)から、テーブルの使用方法に最適な方を選択します。
必要に応じて、もう一方にインデックスを追加します。
CREATE UNIQUE INDEX idx1 ON voting (MemberID, QuestionID);
(MemberID, QuestionID)
だけでなく、にインデックスを追加するメリットはありMemberID
ますか?私が理解している限りQuestionId
、およびで選択するとインデックス付きルックアップが表示される(QuestionId, MemeberId)
ため、欠落しているのは1つMemberId
だけです。