Есть ли смысл использовать 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
имеет смысл, если вы хотите вернуть одну строку.