当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