2011-02-11 43 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

相关问题