Ответ 1
Да, это после ORDER BY. По вашему запросу вы получите запись с самым высоким опубликованнымOn, так как вы заказываете DESC
, делая наибольшее значение сначала в наборе результатов, из которого вы выбираете первый.
Какой из них первый, когда MySQL обрабатывает запрос?
Пример:
SELECT pageRegions
FROM pageRegions WHERE(pageID=?) AND(published=true) AND (publishedOn<=?)
ORDER BY publishedON DESC
LIMIT 1';
Будет ли это возвращать последний опубликованный pageRegion, даже если запись не соответствует ревизии datetime IF LIMIT применяется после ORDER BY?
Да, это после ORDER BY. По вашему запросу вы получите запись с самым высоким опубликованнымOn, так как вы заказываете DESC
, делая наибольшее значение сначала в наборе результатов, из которого вы выбираете первый.
limit
всегда применяется в конце сбора результатов, поэтому после order by
.
Учитывая все ваши предложения, порядок обработки будет
Итак, вы получите самую близкую запись <= publishedOn, соответствующую всем условиям в предложении WHERE.
Просто хотел указать на то, что при заказе MySQL применяется ограничение перед ограничением результатов. Но это не относится к другим БД.
Например, Oracle сначала ограничивает результаты и применяет порядок для указанных результатов. Это имеет смысл, когда вы думаете об этом с точки зрения производительности. В MySQL вы фактически заказываете всю БД ( > 1000 записей), чтобы получить 2