Mysql
 sql >> Base de données >  >> RDS >> Mysql

Y a-t-il un intérêt à utiliser MySQL LIMIT 1 lors d'une requête sur un champ indexé/unique ?

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.