两张表关联删除!急
delete from test1 where id in(select id from test2).
怎么写才能提高效率啊!由于是几百万条记录的删除。!
问题点数:50、回复次数:5Top
1 楼zhangfengh(老狐狸)回复于 2005-07-21 20:52:27 得分 0
用exists代替inTop
2 楼mittee(最后一条大白鲨[无限深情凝视花花版])回复于 2005-07-21 22:04:17 得分 0
几百万条数据啊。
那要做索引,不过做一次索引也挺费时间的,
还有sql语句不要用in拉Top
3 楼liuyi8903(不让疑问伴随)回复于 2005-07-21 22:06:25 得分 20
用这种方式速度还不错的。
create index i_id on test1(id) nologgingTop
4 楼njhart2003()回复于 2005-07-22 07:35:27 得分 20
两点想法:
1.
create index i_id on test1(id) nologging;
alter table test2 cache;
delete test1 where exists (select 1 from test2 where test1.id=test2.id);
2.
create table temp_t nologging as
select * from test1
where not exists (select 1 from test2 where test1.id=test2.id);
truncate table test1;
insert /*+ append*/ into test1 select * from temp_t;
drop table temp_t;
Top
5 楼guangli_zhang(广丽)回复于 2005-07-22 07:54:01 得分 10
create index i_id1 on test1(id) nologging
create index i_id2 on test2(id) nologging
delete from test1 where exists(select 1 from test2 where test1.id = test2.id)
Top




