Дед Мазай
Гений
(58137)
2 года назад
Запросы отличаются по смыслу. Первый запрос выдаст всех пользователей, если существует пользователь с указанным условием.
Есть возможность выдать только первую найденную запись. Синтаксис зависит от СУБД. В данном случае в этом вряд ли есть смысл, поскольку по полю login должен быть уникальный или первичный ключ (а значит есть уникальный индекс). Если уникальный ключ отсутствует, это недоработка.
Ашот БадаловПрофи (574)
2 года назад
MySQL
Есть первичный ключ, логин и пароль пользователя. При добавлении пользователя в таблицу, учитывается уникальность логина. Не подскажите, как тогда выдать только первую найденную запись из условия логин-пароль? И как работает запрос на выборку при индексации поля логин (и пароль), если запрос нашёл соответствующую запись, прогоняет до конца всю таблицу или останавливается при нахождении записи?
ray_hay
Гуру
(4660)
2 года назад
Ну во-первых если есть SQL с вложеным запросом то он всегда будет работать медленее чем без. Если простыми словами то если есть селект внутри селекта то это отработает медленее чем без вложеного селекта. Отсюда и ответ что SQL под цифрой 2 отработает быстрее первого. Вообще первый СКЛ бесмысленый но видимо это просто для примера было приведено.
Во-вторых если нужно получить только первый результат имея ваш SQL без сканирования всех, то вот пример:
SELECT login, password FROM Users WHERE login='qwe' LIMIT 1;
WHERE EXISTS (SELECT * FROM Users WHERE login='qwe');
2) SELECT * FROM Users
WHERE login='qwe');
И можно ли как-то ускорить такую выборку? Или можно как-то прервать запрос на выборку, если нашлась первая запись, удовлетворяющая условию, чтобы не проверять всю таблицу, а только до нужной записи