Добавляет ли "LIMIT 1" в MySQL запросы сделать их быстрее, когда вы знаете, что будет только 1 результат?

Когда я добавляю LIMIT 1 в запрос MySQL, он останавливает поиск после того, как он найдет 1 результат (тем самым ускоряется) или все еще извлекает все результаты и усекает в конце?

Ответ 1

В зависимости от запроса добавление предложения limit может иметь огромное влияние на производительность. Если вы хотите только одну строку (или знаете, что только одна строка может удовлетворить запрос), и не уверены в том, как ее выполнит внутренний оптимизатор (например, предложение WHERE не попадает в индекс и т.д.), То вы должны обязательно добавить предложение LIMIT.

Что касается оптимизированных запросов (с использованием индексов на небольших таблицах), это, вероятно, не будет иметь большого значения в производительности, но опять же - если вас интересует только одна строка, чем независимо, добавьте предложение LIMIT.

Ответ 2

Ограничение может влиять на производительность запроса (см. комментарии и ссылку ниже), а также уменьшает набор результатов, выводимый MySQL. Для запроса, в котором вы ожидаете одного результата, есть преимущества.

Кроме того, ограничение набора результатов может фактически ускорить общее время запроса, поскольку передача больших результирующих наборов использует память и потенциально создает временные таблицы на диске. Я упоминаю об этом, так как недавно я видел приложение, которое не использовало ограничение, убивающее сервер из-за огромных наборов результатов, и с ограничением на использование ресурсов значительно снизилось.

Проверьте эту страницу для получения более подробной информации: Документация по MySQL: Оптимизация LIMIT

Ответ 3

Если возвращается только один результат, то нет, LIMIT не сделает его быстрее. Если результатов много, и вам нужен только первый результат, и нет операторов GROUP или ORDER, тогда LIMIT сделает это быстрее.

Ответ 4

Если вы действительно ожидаете только одного результата, действительно имеет смысл добавить LIMIT в ваш запрос. Я не знаю внутренней работы MySQL, но я уверен, что он не будет собирать результирующий набор из 100'000 + записей, чтобы усечь его до 1 в конце.

Ответ 5

Ответ короче - да. Если вы ограничите свой результат на 1, то даже если вы "ожидаете" один результат, запрос будет быстрее, потому что ваша база данных не будет просматривать все ваши записи. Он просто остановится, как только он найдет запись, соответствующую вашему запросу.