有人可以解释一下+ +限制的建筑群是如何工作的? MySQL查询:
SELECT
id,
avg(sal)
FROM
StreamData
WHERE
...
GROUP BY
id
HAVING
avg(sal)>=10.0
AND avg(sal)<=50.0
LIMIT 100
无限制地查询并且子句执行7秒,具有限制 - 如果条件覆盖大量数据则立即执行,否则执行~7秒。 文档说限制在分组之后执行,这意味着查询应该总是执行~7秒。请帮助弄清楚LIMIT条款限制的内容。
答案 0 :(得分:3)
使用LIMIT 100
只是告诉MySQL只返回结果集中的前100条记录。假设您将查询时间测量为来自Java的往返时间,则查询时间的一个组成部分是通过网络从MySQL移动结果集所需的网络时间。对于大型结果集,这可能需要相当长的时间,并且使用LIMIT 100
应该将此时间减少到零或接近零。
答案 1 :(得分:2)
在SQL中的某个管道中逻辑上应用了这些东西:
FROM
,JOIN
)WHERE
)GROUP BY
)HAVING
)LIMIT
,OFFSET
)现在这些可以由规划人员组成一个不同的执行顺序,如果这是安全的,但如果你按照这个顺序考虑它们,你总能得到正确的数据。
因此按组进行分组,然后使用having进行过滤,然后将结果截断。
答案 2 :(得分:1)
只要MySQL向客户端发送了所需的行数, 除非您使用SQL_CALC_FOUND_ROWS,否则它将中止查询。该 然后可以使用SELECT FOUND_ROWS()检索行数。看到 第13.14节“信息功能”。
http://dev.mysql.com/doc/refman/5.7/en/limit-optimization.html
这实际上意味着如果您的表有相当多的行,服务器不需要查看所有行。它可以在找到100之后立即停止,因为它知道你所需要的一切。