Просто для уточнення: у таблиці може бути не більше одного первинного ключа. Первинний ключ складається з одного або декількох стовпців (з цієї таблиці). Якщо первинний ключ складається з двох або більше стовпців, він називається складеним первинним ключем . Він визначається наступним чином:
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);