如果test原先是没有数据的,可以先drop表test,再create table test as select * from table,再建index,pk之类的约束.
最好使用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重建索引。
1.使用pl/sql工具把test表的主键、外键先disabled掉(不是删除掉),索引可以drop掉,然后再insert完后,再使之enable。 2.复制表: create table test1 as select * from test where 1=1; 3.再在test1上建立主键、外键和索引。 大表中建立索引是较慢的。
insert into test select * from test parrel; --加个parrel试试
或者在insert之前执行: alter session enable dml parallel;
alter session enable dml parallel; dml這是什么啊,我把insert替換掉出錯了, 有沒有一種方法只直sql就可以做到索引失效,然後insert 資料啊,然後再重用索引
让索引失效和drop掉索引达到的效果一样 都不可使用 那不如drop掉索引
因為數據量太大了,把索引drop掉後再重建會很慢,test表裡還有幾個索引
索引可以unusablealter index index_name unusable也可以 alter index index_name rebuild删除索引程序太混乱了,如果表多,可能会丢失索引,也不好批量操作!
用alter index index_name unusable是可以關掉索引但接下來 insert /*+append*/ into test select * from all_objects 就有問題了,報索引被停用無法insert的bug alter index index_name rebuild再重建索引又很慢
create table test1 as select * from test where 1=1 and ...;alter index idx_test rebuild; --可以为idx_test重建索引。
create table test1 as select * from test where 1=1; 3.再在test1上建立主键、外键和索引。
大表中建立索引是较慢的。
alter session enable dml parallel;
dml這是什么啊,我把insert替換掉出錯了,
有沒有一種方法只直sql就可以做到索引失效,然後insert 資料啊,然後再重用索引
都不可使用
那不如drop掉索引
alter index index_name rebuild删除索引程序太混乱了,如果表多,可能会丢失索引,也不好批量操作!
insert /*+append*/ into test select * from all_objects
就有問題了,報索引被停用無法insert的bug
alter index index_name rebuild再重建索引又很慢
索引unusable后使用truncate会使其rebuild
之后会生成一个trc文件.在udump下面.
之后会生成一个trc文件.在udump下面.
insert /*+append ordered no_index(test,idx_no)*/ into test select * from all_objects
這樣我就可以不刪索引速度也提高了,我在測試中一般在6-16之間把三W多數據處理了,以前還要一分鍾到或更多