Est-il utile d'utiliser MySQL "LIMIT 1" lors d'une requête sur la clé primaire/un champ unique ?
Il n'est pas recommandé d'utiliser LIMIT 1
lors d'une requête avec des critères de filtre qui s'appliquent à une clé primaire ou à une contrainte d'unicité. Une clé primaire, ou une contrainte unique, signifie qu'il n'y a qu'une seule ligne/enregistrement dans la table avec cette valeur, une seule ligne/enregistrement sera jamais renvoyée. C'est contradictoire d'avoir LIMIT 1
sur une clé primaire/un champ unique - quelqu'un qui maintiendrait le code plus tard pourrait confondre l'importance et deviner votre code.
Mais l'indicateur ultime est le plan d'explication :
explain SELECT t.name FROM USERS t WHERE t.userid = 4
... renvoie :
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
-----------------------------------------------------------------------------------------------------
1 | SIMPLE | users | const | PRIMARY | PRIMARY | 4 | const | 1 |
...et :
explain SELECT t.name FROM USERS t WHERE t.userid = 4 LIMIT 1
... renvoie :
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
-----------------------------------------------------------------------------------------------------
1 | SIMPLE | users | const | PRIMARY | PRIMARY | 4 | const | 1 |
Conclusion
Pas de différence, pas besoin. Il semble être optimisé dans ce cas (recherche uniquement sur la clé primaire).
Qu'en est-il d'un champ indexé ?
Un champ indexé ne garantit pas l'unicité de la valeur filtrée, il peut y avoir plus d'une occurrence. Donc LIMIT 1
serait logique, en supposant que vous souhaitiez renvoyer une ligne.