sql >> Base de Datos >  >> RDS >> Mysql

¿Tiene algún sentido usar MySQL LIMIT 1 cuando se consulta en un campo indexado/único?

¿Tiene algún sentido usar MySQL "LIMIT 1" cuando se consulta sobre clave principal/campo único?

No es una buena práctica usar LIMIT 1 cuando se consulta con criterios de filtro que están en contra de una clave principal o una restricción única. Una clave principal, o restricción única, significa que solo hay una fila/registro en la tabla con ese valor, solo se devolverá una fila/registro. Es contradictorio tener LIMIT 1 en una clave principal/campo único:alguien que mantenga el código más tarde podría confundir la importancia y adivinar su código.

Pero el último indicador es el plan de explicación:

explain SELECT t.name FROM USERS t WHERE t.userid = 4

...devuelve:

id  | select_type | table   | type  | possible_keys  | key      | key_len  |  ref  |  rows  |  Extra
-----------------------------------------------------------------------------------------------------
1   | SIMPLE      | users   | const | PRIMARY        | PRIMARY  | 4        | const | 1      |

...y:

explain SELECT t.name FROM USERS t WHERE t.userid = 4 LIMIT 1

...devuelve:

id  | select_type | table   | type  | possible_keys  | key      | key_len  |  ref  |  rows  |  Extra
-----------------------------------------------------------------------------------------------------
1   | SIMPLE      | users   | const | PRIMARY        | PRIMARY  | 4        | const | 1      |

Conclusión

No hay diferencia, no hay necesidad. Parece estar optimizado en este caso (solo busca en la clave principal).

¿Qué pasa con un campo indexado?

Un campo indexado no garantiza la unicidad del valor que se filtra, puede haber más de una aparición. Entonces LIMIT 1 tendría sentido, asumiendo que desea devolver una fila.