Sql server 2005 sql server 2005中计算运行总操作的更好性能
我问了这个问题,细节是 在sql中,我有如下表数据Sql server 2005 sql server 2005中计算运行总操作的更好性能,sql-server-2005,select,Sql Server 2005,Select,我问了这个问题,细节是 在sql中,我有如下表数据 id type amount 1 type1 2000 2 type1 1000 3 type2 500 4 type3 3000 5 type1 2000 6 type2 500 7 type3 50
id type amount
1 type1 2000
2 type1 1000
3 type2 500
4 type3 3000
5 type1 2000
6 type2 500
7 type3 5000
8 type1 1000
我想在下面的select语句中获取数据
id type amount current
1 type1 2000 2000
2 type1 1000 1000
3 type2 500 500
4 type3 3000 3000
5 type1 2000 3000
6 type2 -500 0
7 type3 5000 2000
8 type1 -1000 4000
等等
这意味着每种类型都必须有基于金额类型的当前总金额
而且它需要是不具有while循环的,因为执行它需要很长时间
for eg:
in type 1
ID Amount current
1 2000-add 2000
2 1000-sub 1000
3 2000-add 3000
4 1000-add 4000
答案是,
SELECT id,
type,
amount,
(SELECT sum(amount)
FROM mytable t1
WHERE t1.type = t2.type
AND t1.id <= t2.id) currenttotal
FROM mytable t2
执行我根据上述问题的答案(有两个答案,两个答案的执行时间相同)编写的select语句需要00:00:02
时间。如何减少执行时间?试试看
CREATE UNIQUE INDEX IX ON YourTable(type,id) INCLUDE (amount)
只要每个类型的行数不太大,问题中的查询就可以了
SQL Server 2012比以前的版本更好地支持计算运行总计。在SQL Server 2012中,您可以
SELECT id,
type,
amount,
SUM(amount) OVER (PARTITION BY type
ORDER BY id ROWS UNBOUNDED PRECEDING) currenttotal
FROM mytable t2
如何缩短执行时间?您有支持查询的索引吗?我假设您至少看过执行计划。请添加更多详细信息。该查询的适当索引位于type,id INCLUDE(amount)
但是,如果每个类型有很多行,性能仍然会很差。即使添加了问题链接,也要向下投票……这将解释所有@namphian问题都应该是自包含的。我也觉得很烦人,我不得不先访问其他页面,甚至知道你的问题是什么。请解释更多,并用我提供的上述数据举例。。。please@Suresh-我的建议是在表上创建索引。我不能给你举个例子。我的答案中的第一行代码是完成此操作的完整语法。创建索引有望意味着您现有的查询将在可接受的时间内工作。无限制的前一项
意味着?@Suresh-该查询在SQL Server 2005中不起作用我只是提供了它,以防移动到SQL Server 2012是一个选项。它本质上意味着用类型
将所有行从第一行(前面的无界
)加总到当前行。我不能仅用一个编码就改变我的整个项目,你也明白我的意思……sql server 2005中的任何选项请告诉我。。。。
SELECT id,
type,
amount,
SUM(amount) OVER (PARTITION BY type
ORDER BY id ROWS UNBOUNDED PRECEDING) currenttotal
FROM mytable t2