Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy jest jakiś sens używania MySQL LIMIT 1 podczas zapytań o pole indeksowane/unikalne?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaki jest najlepszy sposób na generowanie rang w MYSQL?

  2. Nie mogę dowiedzieć się, jak uruchomić mysqli_multi_query i wykorzystać wyniki z ostatniego zapytania

  3. Rekursywny wybór mysql?

  4. Zapytanie o aktualizację MySQL z lewym dołączeniem i grupowaniem według

  5. MySQL:wstawiaj do wielu tabel w tym samym zapytaniu za pomocą BEGIN&COMMIT