日期:2014-05-18  浏览次数:20756 次

在线等,急,一个急手的问题
一下插入4W条数据到数据库,怎么样的效率最高.
我是在页面里循环等到这四万条记录,然后想把这四万条记录插入到一个表里面去,可是效率好低,请大家帮帮忙,小弟万分感谢!最好是罗列出代码,用存储过程也行。
其实我这里所做的就是从会员表中提取四万条记录出来,然后根据不同的会员,构建不同的邮件内容,最后把这四万封邮件插入到一个表里面去。谢谢

------解决方案--------------------
你那样干不死机就万幸了.你可以考虑分页查询,虽然本质上没变.可是机器的负担却小了很多,进而也就能提高效率了.另外在设置一下COMMAND对象向数据库提交记录的条数(我不知道该怎样描述).默认是1条一发送.如果仅仅是从一个数据表到另一个数据表那就直接用存储过程吧.不知道你的 "邮件 "是不是仅仅称呼不一样.这东西做起来其实很容易,但是真要是表达清楚,就比较费劲了.还有就是你不会连存储过程都不会用吧
------解决方案--------------------
尽量插入一个就提交一个,或者100个提交一次,只要有可能,在程序中尽量多使用COMMIT, 这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少:

COMMIT所释放的资源:

a. 回滚段上用于恢复数据的信息.

b. 被程序语句获得的锁

c. redo log buffer 中的空间

d. ORACLE为管理上述3种资源中的内部花费


(译者按: 在使用COMMIT时必须要注意到事务的完整性,现实中效率和事务完整性往往是鱼和熊掌不可得兼)
------解决方案--------------------
如果经常要插4万条,用网页代码实现有点太不可取了
建议使用异步方式,具体可以看看petshop4的设计模式
http://ityup.com/showtopic-5.html利用多线程与异步处理方式


如果不经常要插入,只是偶尔插入,为什么不直接写sql语句,做成作业运行呢?
------解决方案--------------------
◎可以一次构造4W语句一次执行
想象,构造4w个语句总得花费事件,然后执行一次。。。。。。

------解决方案--------------------
上面的人不是说了,可以考虑分批(每批的数据量不能太大,比如你说的4w条)
另外再考虑下使用多线程