MySQL如何执行带限制的聚合查询?

时间:2009-11-29 02:50:20

标签: mysql

是否对所有可能的结果进行分组,然后发回给定LIMIT内的结果?

2 个答案:

答案 0 :(得分:2)

MySQL手册中的这个页面解释了它优化使用LIMIT的查询的方式:

http://dev.mysql.com/doc/refman/5.1/en/limit-optimization.html

简而言之,它不只是做天真的事情,这将是计算整个结果集,然后发送前N行。

有些事情会阻止优化,包括使用HAVING子句和使用SQL_CALC_FOUND_ROWS。

答案 1 :(得分:1)

LIMIT子句只是选择返回的记录 - 它与查询本身返回的值无关。例如,如果对仅返回5行的查询使用LIMIT 10,则只能获得5行。如果查询返回11行以上,则只能获得10行。对于使用LIMIT始终返回相同结果的查询,您需要指定ORDER BY子句。

考虑以下步骤中发生的查询:

  1. 没有ORDER BY或LIMIT的查询
  2. ORDER BY条件应用于查询步骤1的输出
  3. LIMIT条件适用于步骤1&的输出2
  4. 如果没有指定ORDER BY,则不执行该步骤。