mysql查询优化(使用sum函数)

时间:2016-03-28 07:04:48

标签: mysql database query-optimization

我有一种情况,我已经使用下面的查询来淘汰某些用户的使用,但问题是现在mysql汇总了表中的所有记录。而不是得到所有记录的总和,我只想在总和大于500时停止查询。我已经厌倦了3种不同的方式。任何人都可以建议我哪种方法可以达到最佳效果。

第一版查询

 SELECT
(SUM(radacct.acctinputoctets) + SUM(radacct.acctoutputoctets))/8388608 AS total_usage
FROM `radacct`
WHERE username ='fktmbishals'

第二版查询

SELECT
if ((SUM(radacct.acctinputoctets) + SUM(radacct.acctoutputoctets))/8388608 > 500   , 500, 0) AS total_usage
FROM `radacct`
WHERE username ='fktmbishals'

第3版查询

SELECT
(SUM(temp_radacct.acctinputoctets) + SUM(temp_radacct.acctoutputoctets))/8388608 AS total_usage
FROM (
   SELECT
radacct.acctinputoctets,radacct.acctoutputoctets
FROM `radacct`
WHERE username ='fktmbishals'
LIMIT 10
) as temp_radacct

1 个答案:

答案 0 :(得分:2)

SET @tot := 0; 
SELECT  total_usage 
    FROM  
      ( SELECT  @usage := acctinputoctets + acctoutputoctets AS usage,
                @tot := @tot + @usage / 8388608 AS total_usage
            FROM  radacct
            WHERE username ='fktmbishals'
            ORDER BY  ?? 
      ) x
    HAVING  Total < 500; 

显示运行总数,直到超过500.这是你想要的吗?或者你想要最后一个值?如果是这样,请将其放在使用LIMIT 1的其他查询中。

您需要ORDER BY什么?

你不需要知道什么项目组成500?

如果整个总数少于500,你想要什么?