我有用户事务的表。我需要选择一天内总交易量超过10万的用户。目前我正在做的是收集所有用户ID并执行
SELECT sum ( amt ) as amt from users where date = date("Y-m-d") AND user_id=id;
对于每个id和检查天气amt> 100k与否。
由于它是一个大表,因此需要花费大量时间来执行。有人建议使用优化查询吗?
答案 0 :(得分:1)
这样做:
SELECT sum ( amt ) as amt, user_id from users
where date = date("Y-m-d")
GROUP BY user_id
HAVING sum ( amt ) > 1; ' not sure what Lakh is
答案 1 :(得分:1)
如何过滤记录1,然后应用如下的总和
select SUM(amt),user_id from (
SELECT amt,user_id from users where user_id=id date = date("Y-m-d")
)tmp
group by user_id having sum(amt)>100000
答案 2 :(得分:1)
您可以在单个查询中合并聚合和过滤......
SELECT SUM(Amt) as amt
FROM users
WHERE date=date(...)
AND user_id=id
GROUP BY user_id
HAVING amt > 1
答案 3 :(得分:1)
您可以在查询中进行的唯一优化是在user_id列上应用主键以加快过滤。
就发布的其他答案而言,如果要对过滤的记录应用GROUP BY,则在SQL逻辑查询处理阶段首先执行WHERE CLAUSE将不会产生任何影响。 Check here
答案 4 :(得分:0)
您可以使用MySql子查询让MySql处理所有迭代。例如,您可以像这样构建查询:
select user_data.user_id, user_data.total_amt from
(
select sum(amt) as total_amt, user_id from users where date = date("Y-m-d") AND user_id=id
) as user_data
where user_data.total_amt > 100000;