用DELETE FROM AAA WHERE B='1' 删除从192万条记录的表时,表的记录总数为265万条,B字段已建立了索引,select * from aaa where b='1'命令只需2秒。

解决方案 »

  1.   

    这样比较快:
    create table AAA_bak as select * from AAA where B<>'1';
    drop table AAA;
    rename table AAA_bak to AAA;
      

  2.   

    1.把索引去掉或者用DELETE FROM AAA WHERE to_char(B)='1'
    2.alter table aaa nologging
      

  3.   

    按yfjyz(dd) 说、还不如用truncate呢,
    但是原来表的约束就没了,还要重新建的.
      

  4.   

    同意
    drabit(square)
    1.把索引去掉或者用DELETE FROM AAA WHERE to_char(B)='1'
    2.alter table aaa nologging
      

  5.   

    我以前也删了一个280万的表中的200万数据
    用以下方法删2小时左右
            cDelFalg := '1';
            WHILE cDelFalg = 1
            LOOP 
              DELETE FROM
                aaaa
              WHERE 
        .....
        AND ROWNUM < 10000;   --防止回滚段不够
              IF SQL%ROWCOUNT <= 0 THEN
                cDelFalg:='0';  
              END IF;
              COMMIT;
            END LOOP;
      

  6.   

    create table AAA_bak as select * from AAA where B<>'1';
    truncate table AAA;
    inport AAA_BAK DATA TO AAA.
      

  7.   

    xhy818(zh1860) 的法子好象不错哎.
      

  8.   

    create table AAA_bak as select * from AAA where B<>'1';
    truncate table AAA;
    inport AAA_BAK DATA TO AAA.