MYSQL и предложение LIMIT

Мне было интересно, добавит ли LIMIT 1 запрос к ускорению обработки?

Например…

У меня есть запрос, который в большинстве случаев возвращает результат 1, но иногда будет возвращать записи 10, 100 или даже 1000 записей. Но я буду только хотеть первую запись.

Будет ли ограничение 1 ускорить процесс или не иметь никакого значения?

Я знаю, что могу использовать GROUP BY, чтобы вернуть 1 результат, но это просто добавит больше вычислений.

Любые мысли с радостью принимались!

благодаря

Это зависит, если у вас есть ORDER BY. ORDER BY так или иначе требует весь набор результатов, поэтому его можно заказать.

Если у вас нет ORDER BY, он должен работать быстрее.

Это будет во всех случаях работать как минимум бит быстрее, так как весь набор результатов не обязательно отправляется.

Ага! это будет!

Но, конечно, для добавления «Limit 1» в конец вашего SQL-запроса вам потребуется всего лишь секунд, чтобы почему бы не сделать снимок и посмотреть

Все зависит от самого запроса. Если вы делаете индексированный поиск (где indexedColumn = somevalue) или сортировка в индексированном столбце (без предложения Where), тогда ограничение 1 действительно ускорит его. Если у вас есть соединения или несколько предложений where / order, все становится очень сложным очень быстро. Но главное убрать, используя «LIMIT 1», НИКОГДА не замедлит запрос. Иногда это ускоряет его, но он никогда не замедлит его.

Теперь есть еще одна проблема при работе с PHP. По умолчанию PHP будет буферизовать весь набор результатов перед возвратом из запроса (mysql_query или mysqli-> запрос будет возвращаться только после того, как будут загружены все записи). Таким образом, хотя время запроса может быть мало изменено по пределу 1, время и память, которые PHP использует для буферизации результата, значительны. Представьте, что каждая строка имеет 200 байт данных. Теперь ваш запрос возвращает 10 000 строк. Это означает, что PHP должен выделить дополнительно 2 Мб памяти (фактически ближе к 10 МБ с накладными расходами переменной структуры php), которые вы никогда не будете использовать. Выделение памяти может быть очень дорогостоящим, поэтому общее правило только когда-либо выделяет то, что вам нужно (или считайте, что вам нужно). Скачивание 10 000 строк, когда вы только хотите 1, просто расточительно.

Объедините эти два эффекта, и вы можете понять, почему, если вы хотите только 1 строку, вы должны ВСЕГДА использовать «LIMIT 1».

Ниже приведена соответствующая документация по этому вопросу с сайта MySQL.

Кажется, он может ускорить работу по-разному, в зависимости от других частей запроса. Я не уверен, что это помогает, когда у вас нет предложений ORDER или GROUP или HAVING , кроме возможности немедленно остановиться, а не возвращать каждую строку результатов (что может быть достаточно большим, если вы вернетесь 100 000 записей ).

На самом деле это основная цель предложения LIMIT: P Если вы знаете, сколько результатов вы хотите, вы должны ВСЕГДА указывать это число как LIMIT не только потому, что оно быстрее (если вы не выполняете ORDER BY), а чтобы быть более эффективно с памятью в вашем PHP-скрипте.

Примечание. Я предполагаю, что вы используете MySQL с PHP, так как вы добавили PHP в теги. Если вы просто выбираете из MySQL напрямую (за пределами языка сценариев), то преимущество использования LIMIT при использовании ORDER BY состоит в том, чтобы упростить управление результатами.