作者evernever (NeverEver)
看板Database
标题Re: [SQL ] 请问用回圈与子查询的效能问题
时间Thu May 7 13:49:02 2009
select *, 0 qty_sum into #temp from [Table]
order by part_no
declare @no char, @bal int
update #temp
set @bal = qty_sum = case when @no is null or @no <> part_no then qty
else qty + @bal end,
@no = part_no
Select * From #temp
-- 备注: @no 的 type 是要跟 part_no 一样,我这里先设 char
-- @bal 我设 int, 也是要跟 qty type 一样
※ 引述《eggeggss (Suddenly I See)》之铭言:
: 小弟用的是MSSQL,希望做出累计的效果
: 假设需要累计的资料高达十万笔
: 我的原始资料假设如下:
: id part_no qty
: 1 A 1
: 2 A 2
: 3 A 3
: 4 B 2
: 5 B 1
: .
: .
: .
: 结果要变成
: id part_no qty qty_sum(根据part_no的累计栏位)
: 1 A 1 1
: 2 A 2 3
: 3 A 3 6
: 4 B 2 2
: 5 B 1 3
: .
: .
: .
: 於是我利用以下的sub query 可以达成达成目的
: select part_no,qty_sum=(select sum(qty) from [某table] where id<a.id
: and part_no=a.part_no)
: from 某table a
: 因为之前的前辈在这段的写法是利用回圈计算,(须绕十万次,约一个小时),
: 小弟用profiler
: 发现整只预储程序的bottleneck就是这段计算
: 希望能够改写前辈的写法
: 想请教 sub query与利用回圈计算累加何者效率会比较高
: 小弟有稍微测试两者的效能,似乎看不出何者较高(因为处於多工环境,
: server分配的资源不一定均等,所以无法做banch mark)
: 感激不尽
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.88.112.42
※ 编辑: evernever 来自: 61.88.112.42 (05/07 13:58)
1F:推 eggeggss:感激喔..不过刚测九千笔..似乎速度跟subquery差不多.. 05/08 00:02