sql >> Databáze >  >> RDS >> Mysql

Má smysl používat MySQL LIMIT 1 při dotazování na indexované/unikátní pole?

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.



  1. Nastavení Django a PostgreSQL na dvou různých instancích EC2

  2. seznam všech tabulek v databázi s MySQLi

  3. Jak nainstalovat phpMyAdmin

  4. Jak odstranit z výběru v MySQL?