Czy jest jakiś sens używania MySQL „LIMIT 1” podczas zapytań o klucz podstawowy/unikalne pole?
Nie jest dobrą praktyką używanie LIMIT 1
podczas wykonywania zapytań z kryteriami filtrowania, które są sprzeczne z kluczem podstawowym lub ograniczeniem przez unikalność. Klucz podstawowy lub ograniczenie unikatowe oznacza, że w tabeli jest tylko jeden wiersz/rekord z tą wartością, tylko jeden wiersz/rekord zostanie kiedykolwiek zwrócony. Sprzeczne jest posiadanie LIMIT 1
na kluczu podstawowym/unikalnym polu — osoba utrzymująca kod później może pomylić jego wagę i odgadnąć kod.
Ale ostatecznym wskaźnikiem jest plan wyjaśnień:
explain SELECT t.name FROM USERS t WHERE t.userid = 4
...zwroty:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
-----------------------------------------------------------------------------------------------------
1 | SIMPLE | users | const | PRIMARY | PRIMARY | 4 | const | 1 |
...i:
explain SELECT t.name FROM USERS t WHERE t.userid = 4 LIMIT 1
...zwroty:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
-----------------------------------------------------------------------------------------------------
1 | SIMPLE | users | const | PRIMARY | PRIMARY | 4 | const | 1 |
Wniosek
Bez różnicy, bez potrzeby. Wygląda na to, że w tym przypadku jest zoptymalizowany (wyszukuje tylko według klucza podstawowego).
A co z indeksowanym polem?
Pole indeksowane nie gwarantuje unikalności filtrowanej wartości, może wystąpić więcej niż jedno wystąpienie. A więc LIMIT 1
miałoby sens, zakładając, że chcesz zwrócić jeden wiersz.