作者eggeggss (Suddenly I See)
看板Database
标题Re: [SQL ] 请问用回圈与子查询的效能问题
时间Fri May 8 00:11:44 2009
这里的推文真令人抓狂啊..要等这麽多秒..
超级感谢你提供另外一个写法,
理论上应该比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
1F:推 evernever:这个做法慢是慢在一开始的 select .. into 05/08 07:58
2F:推 evernever:越多笔 subquery 应该越慢,可以试试上万笔或全部 XD 05/08 08:04