Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Какой SQL запрос будет работать быстрее

Ашот Бадалов Профи (574), на голосовании 2 года назад
1) SELECT * FROM Users
WHERE EXISTS (SELECT * FROM Users WHERE login='qwe');
2) SELECT * FROM Users
WHERE login='qwe');

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

SELECT login, password FROM Users WHERE login='qwe' LIMIT 1;
Похожие вопросы