Má nějaký smysl používat MySQL „LIMIT 1“ při dotazování na primární klíč/jedinečné pole?
Není dobrým zvykem používat LIMIT 1
při dotazu s kritérii filtru, která je proti primárnímu klíči nebo jedinečnému omezení. Primární klíč nebo jedinečné omezení znamená, že v tabulce je pouze jeden řádek/záznam s touto hodnotou, vždy bude vrácen pouze jeden řádek/záznam. Je v rozporu mít LIMIT 1
na primárním klíči/unikátním poli – někdo, kdo bude kód později udržovat, by si mohl mýlit důležitost a uhodnout váš kód.
Ale konečným ukazatelem je plán vysvětlení:
explain SELECT t.name FROM USERS t WHERE t.userid = 4
...vrátí:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
-----------------------------------------------------------------------------------------------------
1 | SIMPLE | users | const | PRIMARY | PRIMARY | 4 | const | 1 |
...a:
explain SELECT t.name FROM USERS t WHERE t.userid = 4 LIMIT 1
...vrátí:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
-----------------------------------------------------------------------------------------------------
1 | SIMPLE | users | const | PRIMARY | PRIMARY | 4 | const | 1 |
Závěr
Žádný rozdíl, není potřeba. Zdá se, že je v tomto případě optimalizován (pouze vyhledávání podle primárního klíče).
A co indexované pole?
Indexované pole nezaručuje jedinečnost filtrované hodnoty, může existovat více než jeden výskyt. Takže LIMIT 1
by dávalo smysl, za předpokladu, že chcete vrátit jeden řádek.