Има ли смисъл да използвате 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
би имало смисъл, ако приемем, че искате да върнете един ред.