我想知道limit和offset是在选定行之后执行的吗:
SELECT * FROM users WHERE id > 4 LIMIT 0,90 ORDER BY datetime DESC;
这个查询是先选择所有用户的行再应用 LIMIT
,还是先应用 LIMIT
再选择用户的行?
我想知道limit和offset是在选定行之后执行的吗:
SELECT * FROM users WHERE id > 4 LIMIT 0,90 ORDER BY datetime DESC;
这个查询是先选择所有用户的行再应用 LIMIT
,还是先应用 LIMIT
再选择用户的行?
FROM
子句是查询中首先执行的,然后是WHERE
子句。之后应用LIMIT
子句。
因此,以下是您发布的查询的逻辑查询处理步骤:
FROM
子句返回所有用户。WHERE
子句。只有id > 4
的用户才能通过下一个步骤。LIMIT
。LIMIT
等效功能。搜索WITH TIES
。 - Janus Troelsen选择查询
SELECT * FROM users WHERE id > 4 LIMIT 0,90;
来自http://dev.mysql.com/doc/refman/5.0/en/limit-optimization.html
如果您在ORDER BY中使用LIMIT row_count,MySQL会在找到排序结果的前row_count行后立即结束排序,而不是对整个结果进行排序。如果使用索引进行排序,则速度非常快。如果必须进行文件排序,则必须选择与没有LIMIT子句的查询匹配的所有行,并且必须对其中大部分或全部进行排序,然后才能确定已找到前row_count行。在任何情况下,在找到初始行之后,没有必要对结果集的任何其余部分进行排序,MySQL也不会这样做。