在LIMDER BY之前或之后应用MySQL LIMIT吗?

时间:2011-02-11 22:17:40

标签: sql mysql sql-order-by limit

当MySQL处理查询时,哪一个首先出现?

一个例子:

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

即使记录与ORDER BY之后的IF LIMIT修订日期时间不匹配,是否会返回上次发布的pageRegion?

3 个答案:

答案 0 :(得分:32)

是的,它是在ORDER BY之后。对于您的查询,您将获得具有最高publishOn的记录,因为您正在订购DESC,在结果集中首先设置最大值,然后从中选出第一个。

答案 1 :(得分:24)

limit始终在结果收集结束时应用,因此在order by之后。

鉴于你的所有条款,处理顺序将是

  • FROM
  • WHERE
  • 选择
  • ORDER BY
  • LIMIT

因此,您将获得最接近的记录&lt; = publishedOn匹配WHERE子句中的所有条件。

答案 2 :(得分:3)

只是想指出在限制结果之前应用MySQL排序的情况。但对于其他数据库而言,情况并非如此。

例如,Oracle首先限制结果并对所述结果应用排序。从性能的角度考虑时,这是有道理的。在MySQL中,您实际上是在订购整个数据库(> 1000条记录)以获得2