Делает ли добавление LIMIT 1 к запросам MySQL их быстрее, когда вы знаете, что будет только 1 результат? - PullRequest
78 голосов
/ 18 января 2009

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

Ответы [ 5 ]

69 голосов
/ 18 января 2009

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

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

18 голосов
/ 18 января 2009

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

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

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

4 голосов
/ 18 января 2009

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

2 голосов
/ 28 сентября 2016

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

1 голос
/ 18 января 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...