Когда я добавляю LIMIT 1 к запросу MySQL, останавливает ли он поиск после того, как находит 1 результат (что ускоряет его), или он по-прежнему получает все результаты и обрезает их в конце?
Когда я добавляю LIMIT 1 к запросу MySQL, останавливает ли он поиск после того, как находит 1 результат (что ускоряет его), или он по-прежнему получает все результаты и обрезает их в конце?
Ответы:
В зависимости от запроса добавление предложения limit может иметь огромное влияние на производительность. Если вам нужна только одна строка (или вы точно знаете, что только одна строка может удовлетворить запрос) и не уверены в том, как внутренний оптимизатор выполнит ее (например, предложение WHERE не попадает в индекс и т. Д.), Тогда вам обязательно нужно добавить предложение LIMIT.
Что касается оптимизированных запросов (с использованием индексов в небольших таблицах), это, вероятно, не будет иметь большого значения для производительности, но опять же - если вас интересует только одна строка, чем независимо от того, добавьте предложение LIMIT.
Ограничение может повлиять на производительность запроса (см. Комментарии и ссылку ниже), а также уменьшает набор результатов, выводимый MySQL. Для запроса, в котором вы ожидаете единственного результата, есть преимущества.
Кроме того, ограничение набора результатов может фактически ускорить общее время запроса, поскольку при передаче больших наборов результатов используется память и потенциально создаются временные таблицы на диске. Я упоминал об этом, когда недавно увидел приложение, которое не использовало лимит уничтожения сервера из-за огромных наборов результатов и с установленным лимитом, использование ресурсов резко упало.
Посетите эту страницу для получения более подробной информации: Документация MySQL: Оптимизация LIMIT
Если возвращается только 1 результат, то нет, LIMIT не ускорит его. Если результатов много, и вам нужен только первый результат, и нет операторов GROUP или ORDER by, тогда LIMIT сделает это быстрее.
Короче говоря, да. Если вы ограничите свой результат до 1, тогда, даже если вы «ожидаете» одного результата, запрос будет быстрее, потому что ваша база данных не будет просматривать все ваши записи. Он просто остановится, как только найдет запись, соответствующую вашему запросу.
UNIQUE
(илиPRIMARY KEY
) ограничение (или индекс) на столбец фильтра. stackoverflow.com/questions/8467092/…