循环一张大概20万条记录的表,并发数高
要统计一个数据,需要循环一张表大概20万条记录,用存储过程实现。   
 采用游标方式好还是临时表的方式好呐?   并且是这个存储过程是在线的时候用job一个小时执行一次的,也就是说那个20万条记录的表并发请求量大。 
------解决方案--------------------update c 
 set col = t.col 
 from c,(select id , sum(col) col from b group by id) t 
 where c.id = c.id   
 和A表无关?   
 或   
 insert into c select id , sum(col) col from b group by id
------解决方案--------------------或加上A的限制   
 update c 
 set col = t.col 
 from c, (select a.id , t.sum from a, (select id , sum(col) col from b group by id) t where a.id = t.id) m 
 where c.id = m.id   
------解决方案--------------------你能不能给点具体的数据,看文字头疼.   
 这是名次的处理办法.   
 表jh03有下列数据: 
 name score 
 aa  99 
 bb  56 
 cc  56 
 dd  77 
 ee  78 
 ff  76 
 gg  78 
 ff  50   
 1. 名次生成方式1,Score重复时合并名次 
 SELECT * , Place=(SELECT COUNT(DISTINCT Score) FROM jh03 WHERE Score > = a.Score) 
 FROM jh03 a 
 ORDER BY Place 
 结果 
 Name       Score        Place  
 ---------------- ----------------- -----------  
 aa         99.00        1 
 ee         78.00        2 
 gg         78.00        2 
 dd         77.00        3 
 ff         76.00        4 
 bb         56.00        5 
 cc         56.00        5 
 ff         50.00        6   
 2. 名次生成方式2 , Score重复时保留名次空缺 
 SELECT * , Place=(SELECT COUNT(Score) FROM jh03 WHERE Score >  a.Score) + 1 
 FROM jh03 a 
 ORDER BY Place 
 结果 
 Name       Score        Place  
 --------------- ----------------- -----------  
 aa         99.00        1 
 ee         78.00        2 
 gg         78.00        2 
 dd         77.00        4 
 ff         76.00        5 
 bb         56.00        6 
 cc         56.00        6 
 ff         50.00        8
------解决方案--------------------select a.name , t.cnt from a 
 ( 
   select name , count(*) cnt from b where isTrue = 1 
 ) t 
 where a.name = t.name   
 然后使用我上面给的名次计算办法.
------解决方案--------------------似乎不需要游标,但是你说的太不确切了。 
------解决方案--------------------看不出来你所谓的表C的作用. 
 实际上,每次Truncate table然后重新 
 Insert into C 
 select * from  
 (select name,count(case when istrue=1 then 1 end) t from b 
 group by name) 
 x  
 order by x.t 
 或许会效率更高     
------解决方案--------------------那么如果更新后根本就没有某项的统计数,如何更新排名?
------解决方案--------------------就是排程嘛 
 建議用臨時表好一點
------解决方案--------------------能不能考虑这样做呢,在B表中增加insert update触发器,在插入或者修改状态为True时对C表增加计数,删除或者状态改为false时减少计数器。 
 这样的好处是把统计的时间分散了,而且数据也及时。 缺点是会对性能有些许的影响。
------解决方案--------------------用批量处理语句
------解决方案--------------------创建一张视图,带索引的,然后对这张视图进行操作,性能会好些