Подтвердить что ты не робот

Является ли MySQL LIMIT примененным до или после ORDER BY?

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

Пример:

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

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

4b9b3361

Ответ 1

Да, это после ORDER BY. По вашему запросу вы получите запись с самым высоким опубликованнымOn, так как вы заказываете DESC, делая наибольшее значение сначала в наборе результатов, из которого вы выбираете первый.

Ответ 2

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

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

  • С
  • WHERE
  • SELECT
  • ЗАКАЗАТЬ
  • LIMIT

Итак, вы получите самую близкую запись <= publishedOn, соответствующую всем условиям в предложении WHERE.

Ответ 3

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

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