Juste pour clarifier: une table peut avoir au plus une clé primaire. Une clé primaire se compose d'une ou plusieurs colonnes (de cette table). Si une clé primaire se compose de deux colonnes ou plus, elle est appelée clé primaire composite . Il est défini comme suit:
CREATE TABLE voting (
QuestionID NUMERIC,
MemberID NUMERIC,
PRIMARY KEY (QuestionID, MemberID)
);
La paire (QuestionID, MemberID) doit alors être unique pour la table et aucune des deux valeurs ne peut être NULL. Si vous faites une requête comme celle-ci:
SELECT * FROM voting WHERE QuestionID = 7
il utilisera l'index de la clé primaire. Si toutefois vous faites ceci:
SELECT * FROM voting WHERE MemberID = 7
ce ne sera pas le cas car pour utiliser un index composite, il faut utiliser toutes les clés de la «gauche». Si un index est sur des champs (A, B, C) et que vos critères sont sur B et C, cet index ne vous est d'aucune utilité pour cette requête. Choisissez donc parmi (QuestionID, MemberID) et (MemberID, QuestionID) celui qui convient le mieux à la manière dont vous utiliserez la table.
Si nécessaire, ajoutez un index sur l'autre:
CREATE UNIQUE INDEX idx1 ON voting (MemberID, QuestionID);