大家好,如题,因为优化需求的原因,目前需要处理的历史数据有500万左右,现在我需要在一张新表中生成500万的数据,但是存储过程处理时由于关联比较复杂,在投产的时候要执行完这段程序测试了下需要近10个小时,而这个时间客户接受不了,我自己也接受不了。所以我想在其它环境先生成这500万数据,在投产的时候直接将这500导进去。
 
可是目前发现导进去的速度一样慢,我这样做的,在测试环境将生产投产时应该生成的数据插进这个新表中,数据约500万,执行完后将测试环境的这个表及其数据全导出来,然后投产的时候直接导进去。我测试的时候 导出的是sql脚本,然后我在其它环境测试导入的时候发现还是一样慢,怎么回事呢?直接导入的话应该很快的呀?难道我的导入方式不对?    
 
      我应该怎么做呢?大家有没有更好的办法?投产时间太长啦,谁也不可能守着,而且生产环境不能停这么久,顶多给我一个小时
      

解决方案 »

  1.   

    用expdp导出,导出时指定只导出这个表格,然后投产的时候用impdp导进去。
      

  2.   

    你说是导出成sql? 不应该导出成sql的,这样太慢了把你的impdp脚本发上来看看?另外,你的表导入之前先把索引,主键停了,导完后再重建主键索引,这样会快很多还可以把表设置为nologging如果表上面有触发器,也是一样道理,先停了
      

  3.   

    不要导成insert语句脚本,用exp,imp来导出导入。你导成insert语句,你执行insert语句是很慢的。
      

  4.   

    insert语句脚本很慢的,
    触发器一定要禁了
    主键索引到问题不大,其他索引最好也删除,导完重建。还不行的话(肯定机器太差),你可以先导到另外的表名里,库里再转一次,时间总够啦!
      

  5.   

    将数据库中的表table1 、table2导出
       exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)将d:\daochu.dmp中的表table1 导入
    imp system/manager@TEST  file=d:\daochu.dmp  tables=(table1)
      

  6.   

    首先第一个问题是你用存储过程去处理这些数据时分析时,500万数据量,慢是肯定的。
    但是让我疑问的是你用 用exp,imp来导出导入的脚本贴出来 是不是字段特别多,如果脚本全是insert语句的话,在加上你的字段也特别多,500万数据那肯定也相当慢。建议你用sqlldr命令去导入,或者直接导入表数据。那样速度会很快。
      

  7.   

    一定要导入导出吗?如果可以的话,可以考虑建dblink,然后通过dblink直接把表及数据拉过来存放在临时表里面,然后在插入的需要的表里面