MySQL | Узнать есть ли совпадение, SELECT или EXPLAIN SELECT?

Задача: Узнать существует ли запись по указанному ID=123 (ID ялвяется первичным ключом и идексом)

Можно сделать так: SELECT id FROM table WHERE id=123;
А можно так: EXPLAIN SELECT id FROM table WHERE id=123;

Смысл в том что при explain сама выборка не производится, тоесть теоритически такой запрос должен срабатывать быстрее.

Вопрос: как быстрее и есть ли лучший способ чтобы просто определить существует ли совпадение?

P.S. Тестировал скорость через терминал mysql, для обоих вариантов 1 row in set (0.00 sec)
  • Вопрос задан
  • 5391 просмотр
Пригласить эксперта
Ответы на вопрос 6
eaa
@eaa
Вы же сами пишете «при explain сама выборка не производится» и в то же самое время хотите получить результат, который может получится _только_ при выборке из БД. Вам не кажется это, как бы сказать, абсурдным?

Вообще, если предположим, что explain select сделает-таки выборку, то однозначно, что если кроме показа результатов выборки он еще и будет разрисовывать то, как выполняется запрос — то для этого надо дополнительное время. А значит, это будет выполняться дольше, чем простой select.
Ответ написан
Комментировать
kuzemchik
@kuzemchik
Explain может врать. Если analyze давно не делался.
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
А зачем экономить на спичках? Боюсь узким местом такой запрос быть ну никак не может. Да и EXPLAIN больше для тестирования и анализа работы системы.
Ответ написан
@tnz
Explain вам всегда выдаст 1 строку. Только в случае отсутствия записи в таблице напишет что-нибудь вроде «Impossible WHERE noticed after reading const tables». Да и смысл? Поиск по индексу и так быстрый, он ведь даже в таблицу не ходит при таком запросе.
Ответ написан
Комментировать
AxisPod
@AxisPod
SELECT count(*) FROM table WHERE id=123 LIMIT 1
Ответ написан
Goodver
@Goodver Автор вопроса
Вообще-то в том и смысл что мне НЕ нужне результат, мне нужно просто знать существует ли совпадение или нет. EXPLAIN вприципе не может сделать выборку, он просто показывает что будет выполнено при выборке по селекту. SELECT проделывает то же самое что EXPLAIN + саму выборку, то есть при селекте сначала анализируется запрос, а потом делается выборка. Так вот идея в том что, если мне не нужна сама выборка то зачем использовать селект если эксплейн уже сделает достаточно.

Нет, мне это не кажется абсурдным
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы