Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Existe algum ponto usando o MySQL LIMIT 1 ao consultar no campo indexado/único?

Há algum ponto em usar MySQL "LIMIT 1" ao consultar na chave primária/campo exclusivo?


Não é uma boa prática usar LIMIT 1 ao consultar com critérios de filtro contra uma chave primária ou restrição exclusiva. Uma chave primária, ou restrição exclusiva, significa que há apenas uma linha/registro na tabela com esse valor, apenas uma linha/registro será retornada. É contraditório ter LIMIT 1 em uma chave primária/campo exclusivo - alguém que mantiver o código mais tarde pode confundir a importância e adivinhar seu código.

Mas o indicador final é o plano de explicação:
explain SELECT t.name FROM USERS t WHERE t.userid = 4

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

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

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

Conclusão


Não há diferença, não há necessidade. Parece ser otimizado neste caso (apenas pesquisando na chave primária).

E um campo indexado?


Um campo indexado não garante a exclusividade do valor que está sendo filtrado, pode haver mais de uma ocorrência. Então LIMIT 1 faria sentido, supondo que você deseja retornar uma linha.