Chỉ để làm rõ: một bảng có thể có nhiều nhất một khóa chính. Khóa chính bao gồm một hoặc nhiều cột (từ bảng đó). Nếu một khóa chính bao gồm hai hoặc nhiều cột thì nó được gọi là khóa chính tổng hợp . Nó được định nghĩa như sau:
CREATE TABLE voting (
QuestionID NUMERIC,
MemberID NUMERIC,
PRIMARY KEY (QuestionID, MemberID)
);
Sau đó, cặp (QuestionID, MemberID) phải là duy nhất cho bảng và không giá trị nào có thể là NULL. Nếu bạn thực hiện một truy vấn như thế này:
SELECT * FROM voting WHERE QuestionID = 7
nó sẽ sử dụng chỉ mục của khóa chính. Tuy nhiên, nếu bạn làm điều này:
SELECT * FROM voting WHERE MemberID = 7
nó sẽ không bởi vì để sử dụng một chỉ mục tổng hợp yêu cầu sử dụng tất cả các khóa từ "bên trái". Nếu một chỉ mục nằm trên các trường (A, B, C) và tiêu chí của bạn nằm trên B và C thì chỉ mục đó không có ích gì cho bạn cho truy vấn đó. Vì vậy, hãy chọn trong số (QuestionID, MemberID) và (MemberID, QuestionID), tùy chọn nào phù hợp nhất với cách bạn sẽ sử dụng bảng.
Nếu cần, hãy thêm một chỉ mục vào cái khác:
CREATE UNIQUE INDEX idx1 ON voting (MemberID, QuestionID);