我执行一个存储过程。是生成一批数据插入到数据库的表中。因为数据太多例如超过9万条。就会在客户应用界面上报错,报内存不足等。(存储过程应该是直接生成10万条数据放到内存里,然后统一COMMIT 忘数据库表里插数据的吧?) 
我现在想如果我想一共生成10万条数据,能不能生成到3万条数据的时候就插入到表中,也就是COMMIT一次。然后接着生成3万条又COMMIT一次。然后再生成剩下的1万条数据COMMIT一次。我试了一下。每成生一条数据插入表中我就COMMIT 一次。在ORACLE数据库存储过程中执行不到1分钟就OK了。但我换到sql server2005 中执行半个小时都过去了还没结速。上次是整个生成完数据再COMMIT得。从下午开始执行,到第二天早上才生成。这也太慢了啊。有谁有好办法???高手来来。。谁能解决!!

解决方案 »

  1.   

    首先优化存储过程其次看看服务器什么配置select 100000*8.0/1024
    --需要 781.250000 MB
    按计算结果,10万条记录,使用内存的空间不会超过1G。最后,检查客户程序。如果将结果集取回客户机,再提交回服务器,哪效率肯定是灾难性的,这条应该不至于。
      

  2.   

    是在服务器上执行的。内存4个G。主要是要求生成的数据还不能重复。所以我是随机生成一条数据,然后和库里的数据比较。如果没有再往表里插入。这块判断也要占时间。这样就不一定是就生成了10万条,应该大于等于10万条。分批提交也这么慢啊。那怎么再ORACLE 就不到1分钟?疯了疯了求助求助!!!!
      

  3.   

    生成随机数函数RIGHT(1000000000000000000+CAST(RAND(CHECKSUM(NEWID()))*1000000000000000000 as bigint),18)。用这个函数生成10万条数据。