我的 SQL (MySql) 查询出现性能问题。基本上我有一个与此类似的表:
ID PRICE ID OBJECT
-----------------------------
1 500.00 1 1
2 300.00 1 1
3 400.00 1 1
4 100.00 1 1
5 100.00 1 1
6 100.00 2 3
我需要获得给定数量的最大行数。
例如,给定金额 1000.00,查询必须返回这些 ID(按价格升序排列)和总价。
ID PRICE TOTAL_PRICE
---------------------------------
4 100 100.00
5 100 200.00
2 300 500.00
3 400 900.00
Atm 我正在使用类似于以下查询的查询:
set @total=0;
select a.id, a.price , @total:=@total + a.price as total_price , a.id_user
from shares a
where a.`id_user` != 0 and a.id_object = 1
having @total < 1000.00 order by a.price asc;
它工作正常,但效率不高。提取数据大约需要 1.5 秒(表大约有 1M 行)。
该问题与having 子句有关。
你有什么建议吗?
有没有办法使用子句Having执行此类查询不?
最佳答案
我相信这个(累积总和
)就是您正在寻找的:
set @total = 0;
SELECT ID,
Price,
Total_Price
FROM (
SELECT a.*
,(@total := @total + price) AS total_price
FROM shares a
WHERE a.id_user != 0
AND a.id_object = 1
ORDER BY a.price
) q1
WHERE q1.total_price < 1000;
关于mysql - HAVING 子句和性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31569249/