我要向test表 批量insert 3W批數量,用insert /*+ append  */ into table select * from 
這樣很快,但當test表上有索引後就變得好慢了,請問高手,有沒有可以把索引停掉,等insert完後再開啟,

解决方案 »

  1.   

    那就再insert之前先drop掉索引,然后再create index嘛!我都是这样做的.小数据量的话就没必要了
      

  2.   

    不过要是能停用索引的话,就没必要在insert之前drop index,然后又在insert之后create index了,期待高手出现咯,呵! 
      

  3.   

    主键外键之类的可以disable,索引的话得DROP掉再建吧
      

  4.   

    如果test原先是没有数据的,可以先drop表test,再create table test as select * from table,再建index,pk之类的约束.
      

  5.   

    最好使用pl/sql工具把test表的主键、外键先disabled掉,然后再insert完后,再使之enable。或者可以使用如下语句生成与test带where条件的表:
    create table test1 as select * from test where 1=1 and ...;alter index idx_test  rebuild;    --可以为idx_test重建索引。
      

  6.   

    test表裡原本有幾十W筆數據,發果drop掉索掉再建的話就很慢了,光這時間要能要幾十秒,test表裡有主鍵索引和其他非聚合索引哦,真頭痛....
      

  7.   

    怎樣把index disable好怎沒有設定吧我用load的
      

  8.   

    1.使用pl/sql工具把test表的主键、外键先disabled掉(不是删除掉),索引可以drop掉,然后再insert完后,再使之enable。 2.复制表: 
    create table test1 as select * from test where 1=1; 3.再在test1上建立主键、外键和索引。
    大表中建立索引是较慢的。
      

  9.   

    insert into test select * from test parrel; --加个parrel试试
      

  10.   

    或者在insert之前执行:
    alter session enable dml parallel;
      

  11.   

    alter session enable dml parallel;
    dml這是什么啊,我把insert替換掉出錯了,
    有沒有一種方法只直sql就可以做到索引失效,然後insert 資料啊,然後再重用索引
      

  12.   

    让索引失效和drop掉索引达到的效果一样
    都不可使用
    那不如drop掉索引
      

  13.   

    因為數據量太大了,把索引drop掉後再重建會很慢,test表裡還有幾個索引
      

  14.   

    索引可以unusablealter index index_name unusable也可以
    alter index index_name rebuild删除索引程序太混乱了,如果表多,可能会丢失索引,也不好批量操作!
      

  15.   

    用alter index index_name unusable是可以關掉索引但接下來
    insert /*+append*/ into test select * from all_objects
    就有問題了,報索引被停用無法insert的bug
    alter index index_name rebuild再重建索引又很慢
      

  16.   

    oracle主键默认为索引,如果是主键的索引被禁止了,就会出错,先将主键外键约束禁止。这样主键索引自动会去掉,再禁止非主键的索引,开启主键的时候索引自动会重建!
      

  17.   

    要注意的是
    索引unusable后使用truncate会使其rebuild
      

  18.   

    关键是,慢在哪里?做过trace 吗?  使用extend sqltrace来先看看慢在什么地方再下手.
      

  19.   

    就在insert时要一分多钟啊,toad这工具显示的
      

  20.   

    我指的是trace,  如alter session set sql_trace=true;insert .....
    之后会生成一个trc文件.在udump下面.
      

  21.   

    我指的是trace,  如alter session set sql_trace=true;insert .....
    之后会生成一个trc文件.在udump下面.
      

  22.   

    各位大俠,我在測試中使用
    insert /*+append ordered no_index(test,idx_no)*/ into test select * from all_objects
    這樣我就可以不刪索引速度也提高了,我在測試中一般在6-16之間把三W多數據處理了,以前還要一分鍾到或更多