#mysql #sql
#mysql #sql
Вопрос:
Давайте предположим, что у меня есть простой запрос select * from table;, в котором я заранее знаю, сколько записей существует. Допустим, 100.
Есть ли какие-либо различия в производительности между этими тремя вызовами?
1) выберите * из таблицы;
2) выберите * из ограничения таблицы 100;
3) выберите * из ограничения таблицы 1000;
Каждый из этих вызовов вернет ровно 100 строк. Влияют ли различные предельные значения или отсутствие предельного значения на то, насколько быстрым будет вызов?
Комментарии:
1. Я голосую за то, чтобы закрыть этот вопрос как не относящийся к теме, потому что производительность легко тестируется.
2. Вам придется пробовать каждый запрос и измерять результаты, чтобы быть уверенным. Но я предполагаю, что нет существенной разницы в производительности, если ограничение равно или превышает фактическое количество записей.
3. Я думаю, что важно установить ограничение. Проверьте это
4. Я сомневаюсь, что будет большая разница, если она вообще будет. Во всяком случае, добавление оператора LIMIT будет немного медленнее, потому что оно должно подтвердить, что количество возвращаемых строк все еще ниже этого предела. Но я сильно сомневаюсь, что это было бы даже близко к заметному.
5. Вы не увидите существенной разницы между этими запросами. Это не то,
limit
что влияет на вашу производительность, ноoffset
. Я согласен с @JustinNiessner, и я думаю, что вы потратили больше времени на написание этого вопроса, чем могли бы потратить на написание простого PHP-скрипта, чтобы протестировать его самостоятельно.
Ответ №1:
Да и нет.
LIMIT
Без ORDER BY
позволяет движку выдавать произвольные строки. Но это будет быстрее при меньшем LIMIT
— время по существу пропорционально количеству доставленных строк.
ORDER BY ... LIMIT ...
возможно, придется отсортировать всю таблицу перед доставкой некоторого подмножества строк. Таким образом, это, вероятно, будет медленнее, чем без ORDER BY
, возможно, намного медленнее.
С an ORDER BY
скорость может зависеть от того, какие у вас индексы и что находится в WHERE
предложении.
Я хочу сказать, что в реалистичном запросе происходит так много всего, что однострочный ответ на ваш вопрос практически не предоставит полезной информации.
Ответ №2:
Это полностью зависит от используемой вами базы данных (даже разные версии mysql, вероятно, имеют значение).
Вероятно, у вас будет разница в производительности между указанием limit и неуказанием limit (хотя и очень незначительная). Поскольку база данных может использовать другой план выполнения.
Но это только на начальном этапе, поскольку большинство баз данных кэшируют запросы. (При тестировании этой производительности убедитесь, что вы отключили это)
Комментарии:
1. «Вероятно, у вас будет разница в производительности между указанием limit и неуказанием limit. «. В каких случаях? OP четко упомянул, что строки находятся в пределах лимита.
2. Хотя бы для отправки еще 10 символов в службу БД, что означает большую полезную нагрузку запроса. Я согласен, что это на наноуровне, и вам не стоит беспокоиться об этом, но тогда вопрос не очень конкретный.