当MySQL处理查询时,哪一个首先出现?
一个例子:
SELECT pageRegions
FROM pageRegions WHERE(pageID=?) AND(published=true) AND (publishedOn<=?)
ORDER BY publishedON DESC
LIMIT 1';
即使记录与ORDER BY之后的IF LIMIT修订日期时间不匹配,是否会返回上次发布的pageRegion?
答案 0 :(得分:32)
是的,它是在ORDER BY之后。对于您的查询,您将获得具有最高publishOn的记录,因为您正在订购DESC
,在结果集中首先设置最大值,然后从中选出第一个。
答案 1 :(得分:24)
limit
始终在结果收集结束时应用,因此在order by
之后。
鉴于你的所有条款,处理顺序将是
因此,您将获得最接近的记录&lt; = publishedOn匹配WHERE子句中的所有条件。
答案 2 :(得分:3)
只是想指出在限制结果之前应用MySQL排序的情况。但对于其他数据库而言,情况并非如此。
例如,Oracle首先限制结果并对所述结果应用排序。从性能的角度考虑时,这是有道理的。在MySQL中,您实际上是在订购整个数据库(> 1000条记录)以获得2