Применяется ли MySQL LIMIT до или после ORDER BY? - PullRequest
35 голосов
/ 12 февраля 2011

Какой из них появляется первым, когда MySQL обрабатывает запрос?

Пример:

SELECT pageRegions
FROM pageRegions WHERE(pageID=?) AND(published=true) AND (publishedOn<=?)
ORDER BY publishedON DESC
LIMIT 1';

Будет ли возвращать последний опубликованный pageRegion, даже если запись не соответствует дате и времени редакции, если применяется LIMIT после ORDER BY?

Ответы [ 3 ]

32 голосов
/ 12 февраля 2011

Да, это после ЗАКАЗА.Для вашего запроса вы получите запись с наибольшим значением значение selectedOn, так как вы заказываете DESC, сначала в наборе результатов задаете самое большое значение, из которого вы выбираете первое.

24 голосов
/ 12 февраля 2011

limit всегда применяется в конце сбора результатов, поэтому после order by.

Учитывая все ваши пункты, порядок обработки будет

  • FROM
  • WHERE
  • SELECT
  • ЗАКАЗАТЬ ПО
  • LIMIT

Таким образом, вы получите ближайшую запись <= опубликовано, соответствующую всем условиям в предложении WHERE. </p>

3 голосов
/ 18 ноября 2013

Просто хотел указать на то, что в случае применения MySQL применяется ограничение перед ограничением результатов. Но это не относится к другим БД.

Например, Oracle сначала ограничивает результаты и применяет порядок к указанным результатам. Это имеет смысл, когда вы думаете об этом с точки зрения производительности. В MySQL вы фактически заказываете всю БД (> 1000 записей), чтобы получить 2

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