如何通过限制工作

时间:2016-08-08 11:15:27

标签: mysql sql database postgresql

有人可以解释一下+ +限制的建筑群是如何工作的? 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条款限制的内容。

3 个答案:

答案 0 :(得分:3)

使用LIMIT 100只是告诉MySQL只返回结果集中的前100条记录。假设您将查询时间测量为来自Java的往返时间,则查询时间的一个组成部分是通过网络从MySQL移动结果集所需的网络时间。对于大型结果集,这可能需要相当长的时间,并且使用LIMIT 100应该将此时间减少到零或接近零。

答案 1 :(得分:2)

在SQL中的某个管道中逻辑上应用了这些东西:

  1. 生成并执行表格表达式(FROMJOIN
  2. 已过滤行(WHERE
  3. 已应用预测和汇总(列列表,汇总,GROUP BY
  4. 聚合过滤(HAVING
  5. 结果有限(LIMITOFFSET
  6. 现在这些可以由规划人员组成一个不同的执行顺序,如果这是安全的,但如果你按照这个顺序考虑它们,你总能得到正确的数据。

    因此按组进行分组,然后使用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之后立即停止,因为它知道你所需要的一切。