Loading...
Нужен LIMIT 1 в конце sql запроса если 1 поле уникальное в бд , поиск будет продолжаться после первого совпадения ?

`email` VARCHAR(255) NOT NULL UNIQUE,
`password` CHAR(60) NOT NULL,



$user_data = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT `id`, `password` FROM `".DB_PREFIX."_users` WHERE `email` = '".esc($_GET['email'])."' AND `password` = '".esc($_GET['password'])."'"));

________
посл. ред. 10.04.2025 в 14:41; всего 4 раз(а); by SNEG
SNEG , не обязательно, но и не повредит.
SNEG ,
Для индексов с одним столбцом UNIQUE, когда MySQL находит первую строку, которая соответствует критериям поиска, он знает, что другие строки не могут иметь такое же значение. Поэтому он вернет результат.
Да, добавление LIMIT 1 в SQL-запрос имеет смысл даже если поле email уникальное, и вот почему:

email в БД уже объявлен как UNIQUE, значит, максимум один результат может быть возвращён.

Однако без LIMIT 1 MySQL всё равно будет сканировать данные до конца (если не использует индекс эффективно) — особенно если есть сложные условия, отсутствует подходящий индекс, или используется AND/OR.

Поэтому:

SELECT `id`, `password`
FROM `prefix_users`
WHERE `email` = 'user@example.com' AND `password` = 'secret'
LIMIT 1

Добавление LIMIT 1 даёт две вещи:

Подсказка для оптимизатора: MySQL может остановить выполнение после первого совпадения.

Повышение производительности, особенно при отсутствии хорошего индекса (в твоём случае email уже индексирован, но AND password = ... может мешать идеальному плану запроса).

Кстати: проверку пароля лучше делать через password_verify(), а не прямым сравнением в SQL — это безопаснее и гибче.

Хочешь покажу как?
Онлайн: 7
Время:
Gen. 0.084
(c) ByMAS.RU 2010-2025