2016-01-15 3 views
8

Я пользуюсь InnoDB. Мне нужно запросить, чтобы получить 10 записей из таблицы - это любой порядок.Можно ли использовать LIMIT без ORDER BY

Можно ли использовать LIMIT без заказа? Было бы быстрее?

+1

вы можете использовать ограничение без заказа. какой тип safty вы хотите? –

ответ

2

Если вы не используете ORDER BY, то вы не сортируют ваши записи, поэтому он, безусловно, сделает ваш поиск данных быстрее. Поэтому, если вы просто используете LIMIT, это будет быстрее по сравнению с данными, полученными через ORDER BY. Но обратите внимание, что в этом случае тогда случай будет не в любом порядке.

Что касается безопасности, я не уверен, о какой безопасности вы думаете, так как нет никакого потенциального вреда в запросе, который использует только LIMIT и не использует предложение ORDER BY.

Вы также можете посмотреть на статью: ORDER BY … LIMIT Performance Optimization

1

Да, вы можете и да, это было бы быстрее (при условии, что заказ не имеет значения для вас). order by требует сортировки. Это означает, что база данных должна делать больше работы, чтобы получить результат. Чаще всего limit используется с order by так хотите поставить некоторые упорядочивания ограничения на , которые 10 записей вы получите (скажем самый последний, самый высокий ранг какой-то, и т.д.)

1

Это зависит, что вы считаете, как обеспечить при, если вы хотите, последовательный результат (meanning, получая тот же результат каждый раз до тех пор, как и содержимое таблицы не изменится), или если вам нужен конкретный результат (большие, самые новые, самые старые, любые) - чем это требует порядка. Если по безопасности вам мешает, что запрос не раздавится, и вы не заботитесь о том, какие результаты X вы получите, чем да, использование лимита прекрасное (это фактически автоматически выполняется многими инструментами sql, такими как workbench mysql, чтобы ускорить работу).

С точки зрения Скорость- сделает расточитель без того, по двум причинам:

  1. заказа занимает много времени.
  2. Использование ограничения позволяет серверу остановиться, когда он найдет первые результаты X. Вы можете видеть, что запросы с limit 10 будут работать быстрее, чем limit 100000 на больших таблицах. Когда вы используете заказ, сервер должен пройти весь результат, поэтому остановка не может быть посередине.

Так что да, используя предел без того будет делать это быстрее

0

В 3 ответов до сих пор хороши. Но они не совсем правильны.

В отличие от других ответов, иногда выходя из ORDER BY будет не сделать это быстрее. Возможно, оптимизатор может генерировать строки в этом порядке. Примеры:

  • GROUP BY обычно заказывает результаты. Итак, если ORDER BY будет соответствовать GROUP BY, никаких дополнительных усилий не будет.
  • ORDER BY the_primary_key может соответствовать порядку выборки. Это почти гарантировано для InnoDB без предложения WHERE.

«Безопасный» не вычисляет.

Смежные вопросы