當MySQL處理查詢時,哪一個先到?MySQL LIMIT是在ORDER BY之前還是之後應用的?
一個例子:
SELECT pageRegions
FROM pageRegions WHERE(pageID=?) AND(published=true) AND (publishedOn<=?)
ORDER BY publishedON DESC
LIMIT 1';
將返回上一次發佈的pageRegion即使IF訂單後施加作用的極限記錄不匹配修改日期時間?
當MySQL處理查詢時,哪一個先到?MySQL LIMIT是在ORDER BY之前還是之後應用的?
一個例子:
SELECT pageRegions
FROM pageRegions WHERE(pageID=?) AND(published=true) AND (publishedOn<=?)
ORDER BY publishedON DESC
LIMIT 1';
將返回上一次發佈的pageRegion即使IF訂單後施加作用的極限記錄不匹配修改日期時間?
是的,它在ORDER BY之後。對於您的查詢,您將獲得發佈數最高的記錄,因爲您訂購的是DESC
,因此在結果集中將第一個值作爲最大值,其中第一個值是第一個值。
limit
始終應用於結果收集的末尾,因此在order by
之後。
鑑於所有的條款,處理的順序將是
所以,你會得到最近的記錄< = publishedOn匹配所有WHERE子句中的條件。
只是想指出在限制結果之前應用MySQL排序。但是對於其他數據庫來說這不是真的。
例如,Oracle首先會限制結果並對所述結果應用排序。從性能角度考慮時,這是有道理的。在MySQL中,您實際上訂購了整個DB(> 1000條記錄)以獲得2
很高興知道,謝謝@ cristian!我從表現的角度對此感到好奇。 – Alastair 2014-02-06 01:46:39