表A(id,t1,t2,t3...)大概有40个字段 数据量有100万
我现在写一个存储过程来实现计算表A中的每条记录的费用
计算过程如下:
1.计算天数D  通过字段t1计算得天数
2.计算年度Y  通过t2计算得年
3.计算金额M  通过参数id,D,Y去查询表B的某个字段得到(这里写了一个函数,函数中SQL查询得到结果)
4.计算金额M2 通过参数id,D,Y,M去查表C的某个字段得到
5.将id,D,Y,M,M2 插入一个新表D中
上面是我计算的大概过程
我现在采用的是在游标中循环,在循环中计算,并将数据放入索引表 结束循环
在循环将索引表的数据批量插入新表现在测试性能,发现运行相当的慢,测试3万数据要6小时才完成计算的方式或者过程我应该怎么改进?先谢谢大家了!

解决方案 »

  1.   

    用临时表来做中间数据计算比较不错,最好在修改的时候禁掉index
      

  2.   

    你的ID是游标获取的吧,然后针对每个ID执行1,2,3,4? 不能批量处理吗?
    感觉你的1,2可以合并而不是分开两步吧?
    不能通过GROUP BY ID一次查询出D,Y,M,M2 ?
    将表结构贴出来,以及3,4的需求
      

  3.   


    既然是一行一行的操作,我感觉你for循环里的东西用一条SQL就可以搞定呵呵。。
      

  4.   

    我真正的需求比较复杂,我举的例子,是简单化了,其中表A实际上是由5个表做关联查询得到的字段,计算天数和年数也需要几种不同情况,还有其它的计算因子没有列出来,不能一条SQL搞定的。一楼说的临时表,怎么在我的过程里使用?能具体点吗?