Mysql
 sql >> база данни >  >> RDS >> Mysql

Има ли смисъл да използвате MySQL LIMIT 1 при запитване към индексирано/уникално поле?

Има ли смисъл да използвате MySQL „LIMIT 1“ при запитване към първичен ключ/уникално поле?

Не е добра практика да използвате LIMIT 1 при запитване с критерии за филтриране, които са срещу първичен ключ или уникално ограничение. Първичен ключ или уникално ограничение означава, че има само един ред/запис в таблицата с тази стойност, само един ред/запис винаги ще бъде върнат. Противоречиво е да имате LIMIT 1 на първичен ключ/уникално поле – някой, който поддържа кода по-късно, може да сбърка важността и да отгатне кода ви.

Но крайният индикатор е планът за обяснение:

explain SELECT t.name FROM USERS t WHERE t.userid = 4

... връща:

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

...и:

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

... връща:

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

Заключение

Няма разлика, няма нужда. Изглежда, че е оптимизиран в този случай (търсене само спрямо първичния ключ).

Ами индексирано поле?

Индексирано поле не гарантира уникалност на филтрираната стойност, може да има повече от едно срещане. Така че LIMIT 1 би имало смисъл, ако приемем, че искате да върнете един ред.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. използването на инструкция mysql LOAD в PHP се проваля, но това чрез команден ред работи

  2. Как да покажа категория и подкатегория?

  3. Архивиране на база данни(и) с помощта на заявка без използване на mysqldump

  4. Каква е разликата между SQL и MySQL?

  5. Как да избягам % в заявка, използвайки execute() на sqlalchemy на python и pymysql?