问题如下:
    某城市中国电信的Oracle数据库中有5000万条记录,现要将这些记录全部删除,请问你觉得应该使用什么样的方法?

解决方案 »

  1.   

    sorry,掉了一点,问题修改一下:
        某城市中国电信的Oracle数据库的某张表中中有5000万条记录,现要将这些记录全部删除,请问你觉得应该使用什么样的方法?
      

  2.   


    如果追求速度的话:用truncate table table_name,由于它不记录日志,速度会很快
    但是它是不可以通过备分恢复。
      

  3.   

    如果要彻底删除的话当然是TRUNCATE,这跟重建的新表的结果一样,而且自增字段会从原始的初值开始增加
      

  4.   

    to sduzjw:
      oracle没有自增字段.
      
      sqlserver用的太多了吧?
      

  5.   

    除了直接truncate表之外,我想还有一种,就是drop该表,然后再重建
      

  6.   

    其实DROP表更快些,只不过要考虑到与表有关的其他东西,如:TRIGGER,INDEX等!
      

  7.   

    这个问题看似简单,其实不然,我们先设好一个条件:不能采用DROP TABLE之类的手段,看哪个能有个好办法,更进一步,只删其中的4999W条,怎么删除最快?
    我遇到多次这种情况了,当然记录没这么多,最多的有30W条,要SQL,INSERT,DELETE都很慢,有哪位朋友指教一下
      

  8.   

    既然是1999W,就不可以使用truncate table.
    可以delete了。可以把索引定义导出,然后删除,最后delete完数据后,再重建索引。
      

  9.   

    如果删除全部数据并且不需要回滚的话用truncate
    如果删除部分数据(数据量比较大),把该表的索引先全部删除,然后delete,建议写个过程什么的, 执行部分数据提交一次.等表中只剩下你自己需要的数据了,然后再重建索引.
      

  10.   

    把该表的索引先全部删除,然后delete,建议写个过程 每次删除1000条commit;
    这样安全,快没有commit;的话就慢俩
      

  11.   

    没有删除过这么多的数据的,但是,一般考虑会用truncate 或 drop 在重建新表;
    如果,只是删除部分的话 wxyq2000的建议不错,我就这么做过!
      

  12.   

    用truncate 或 drop 在重建新表
      

  13.   

    to baojianjun(包子) :
        Drop Table 是不是可以呢我想你的意思可能是考虑到企业级数据库中的表之间可以不存在任何关实体关系。但是删除一个表整个数据库的结构发生了变化。
      

  14.   

    Truncate table 是比较好的选择.drop table 会引起有关联的对象为 invaild 状态.