Re: [SQL ] 請問用迴圈與子查詢的效能問題
看板Database (資料庫)作者eggeggss (Suddenly I See)時間16年前 (2009/05/08 00:11)推噓2(2推 0噓 0→)留言2則, 1人參與討論串3/4 (看更多)
這裡的推文真令人抓狂啊..要等這麼多秒..
超級感謝你提供另外一個寫法,
理論上應該比SUB QUERY快,
於是我剛剛心血來潮把你的寫法加了進去,
想要測試SUB QUERY跟你寫法的速度
結果我竟然發現差不多,雖然我只測了5次,資料筆數9000筆
也許我應該測個十次以上取平均值,或者增加資料筆數才能發現之間的差異
總之感謝你提供新寫法(總之,無論如何已經比回圈還快了,約增加3~4成效能)
※ 引述《evernever (NeverEver)》之銘言:
: 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: 118.169.97.54
推
05/08 07:58, , 1F
05/08 07:58, 1F
推
05/08 08:04, , 2F
05/08 08:04, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 4 篇):
Database 近期熱門文章
PTT數位生活區 即時熱門文章