2011-02-11 67 views
31

當MySQL處理查詢時,哪一個先到?MySQL LIMIT是在ORDER BY之前還是之後應用的?

一個例子:

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

將返回上一次發佈的pageRegion即使IF訂單後施加作用的極限記錄不匹配修改日期時間?

回答

28

是的,它在ORDER BY之後。對於您的查詢,您將獲得發佈數最高的記錄,因爲您訂購的是DESC,因此在結果集中將第一個值作爲最大值,其中第一個值是第一個值。

20

limit始終應用於結果收集的末尾,因此在order by之後。

鑑於所有的條款,處理的順序將是

  • FROM
  • WHERE
  • 選擇
  • ORDER BY
  • LIMIT

所以,你會得到最近的記錄< = publishedOn匹配所有WHERE子句中的條件。

3

只是想指出在限制結果之前應用MySQL排序。但是對於其他數據庫來說這不是真的。

例如,Oracle首先會限制結果並對所述結果應用排序。從性能角度考慮時,這是有道理的。在MySQL中,您實際上訂購了整個DB(> 1000條記錄)以獲得2

+0

很高興知道,謝謝@ cristian!我從表現的角度對此感到好奇。 – Alastair 2014-02-06 01:46:39

相關問題