Re: [SQL ] 請問用迴圈與子查詢的效能問題

看板Database (資料庫)作者 (NeverEver)時間16年前 (2009/05/07 13:49), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/4 (看更多)
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)

05/08 00:02, , 1F
感激喔..不過剛測九千筆..似乎速度跟subquery差不多..
05/08 00:02, 1F
文章代碼(AID): #1A0dPJHC (Database)
文章代碼(AID): #1A0dPJHC (Database)