Si j'ai un index unique sur une table qui couvre 2 champs, devrais-je ajouter un autre index sur chaque champ?Dois-je ajouter plusieurs index?
Exemple:
Ma table ressemble à ceci:
CREATE TABLE IF NOT EXISTS `my_table` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`usersID` int(11) NOT NULL,
`userTypesID` int(11) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
ajouter alors un index unique qui couvre à la fois usersID
et userTypesID
:
ALTER TABLE `my_table` ADD UNIQUE `usersID_userTypesID` ( `usersID` , `userTypesID`)
Est-il vaut la peine d'ajouter 2 mois re indexes, un sur usersID
et un autre sur userTypesID
? par exemple:
ALTER TABLE `my_table` ADD INDEX ( `usersID`)
ALTER TABLE `my_table` ADD INDEX ( `userTypesID`)
ajouter uniquement ces indices supplémentaires accélèrent certaines requêtes? Tels que:
SELECT `usersID`
FROM `my_table`
WHERE `userTypesID` = 101
Ou
SELECT `usersTypesID`
FROM `my_table`
WHERE `usersID` = 29
+1, Merci pour la question de référence, il confirme que la réponse d'Alnitaks est correcte, car comme indiqué dans la réponse, mysql peut utiliser l'index le plus à gauche. – Drahcir
@ Gerve le lien dans ma réponse (peut-être pas très évident) parle également d'utiliser la colonne la plus à gauche. J'ai dit «en théorie» dans ma réponse parce que j'ai vu des circonstances où un index sur une seule colonne fonctionnait beaucoup mieux qu'un index sur deux. – Alnitak
Je suggérerais d'essayer EXPLAIN SELECT .. O users usersID = 1 EXPLAIN SELECT .. WHERE userTypesID = 1 et vice versa, vous verrez quand l'index est utilisé et quand non. Et oui, le lien d'Alnitak explique comment cela fonctionne. – olegkhuss