有人能解释一下构造是如何通过+ having + limit准确地工作的吗?MySQL查询:
SELECT
id,
avg(sal)
FROM
StreamData
WHERE
...
GROUP BY
id
HAVING
avg(sal)>=10.0
AND avg(sal)<=50.0
LIMIT 100查询without limit和having子句执行7秒,with limit -如果条件覆盖大量数据,立即执行,否则执行~7秒。文档指出,限制在group by之后执行,这意味着查询应该始终执行约7秒。请帮我弄清楚什么是限制条款。
发布于 2016-08-08 19:23:50
使用LIMIT 100只是告诉MySQL只返回结果集中的前100条记录。假设您将查询时间度量为从Java往返,那么查询时间的一个组成部分是在网络上移动来自MySQL的结果集所需的网络时间。对于较大的结果集,这可能需要相当长的时间,使用LIMIT 100可以将这段时间减少到零或接近零。
发布于 2016-08-08 19:30:57
在SQL中,事物在逻辑上应用于某个管道中:
将生成并执行有限表表达式(已应用列列表、JOIN)
WHERE)
GROUP BY)
HAVING)
FROM、OFFSET)现在,如果这是安全的,规划者可能会将它们组合成不同的执行顺序,但如果您按此顺序考虑,您总是会得到正确的数据。
因此,group by group,然后使用having过滤这些组,然后截断结果。
发布于 2016-08-08 19:33:43
只要MySQL向客户端发送了所需的行数,它就会中止查询,除非您使用的是SQL_CALC_FOUND_ROWS。然后可以使用SELECT FOUND_ROWS()检索行数。请参阅第13.14节“信息功能”。
http://dev.mysql.com/doc/refman/5.7/en/limit-optimization.html
这实际上意味着,如果您的表有相当多的行,服务器不需要查看所有行。一旦找到100,它就会停止,因为它知道这就是您所需要的。
https://stackoverflow.com/questions/38827817
复制相似问题