请问几个关联的数据表,如何高效率的删除其中的部分数据啊?
比如有3个表A、B、C
xxx代表其它字段
A表结构(ID1 字段为自动增长)
ID1 Time xxx
1 2001-1-1
2 2002-2-2
3 2003-3-3
............
B表结构
ID2 ID1 xxx
4 1
5 1
6 2
...........
C表结构
ID3 ID2 xxx
7 4
8 5
9 6
............
也就是说表A和B是一对多的关系,而B和C是一对一的关系
现在我要删除3个表中时间在2002-2-2 之前的数据,该怎么写执行效率高呢?因为我实际应用中的数据量相对较大,表A大概30几万数据,B和C大概是300多万,请帮我想下该如何执行这个操作呢?谢谢!!!
问题点数:100、回复次数:11Top
1 楼lsqkeke(可可)回复于 2006-03-02 08:45:24 得分 5
在A表上建立删除触发器
或者写在一个存储过程里边,用事务处理Top
2 楼wgsasd311(自强不息)回复于 2006-03-02 08:49:42 得分 0
DELETE C FROM TA A,TB B,TC C
WHERE A.[TIME]<'2002-2-2' AND A.ID1=B.ID1 AND B.ID2=C.ID2
DELETE B FROM TA A,TB B
WHERE A.[TIME]<'2002-2-2' AND A.ID1=B.ID1
DELETE TA WHERE [TIME]<'2002-2-2'
Top
3 楼srz007(呵呵)回复于 2006-03-02 09:06:03 得分 0
先谢谢楼上2位的回答,不过
DELETE C FROM TA A,TB B,TC C
WHERE A.[TIME]<'2002-2-2' AND A.ID1=B.ID1 AND B.ID2=C.ID2
这种方法的执行效率实在是太低了
我昨天按这种方式执行,到现在还没结束呢,已经运行将近24小时了!Top
4 楼srz007(呵呵)回复于 2006-03-02 09:50:56 得分 0
自己顶Top
5 楼ziping(子平)回复于 2006-03-02 11:17:19 得分 0
是不是在数据库里面设置了表关联了?或者触发器这些东西?Top
6 楼mm2love2zz(never stop.)回复于 2006-03-02 14:03:22 得分 0
写一个函数
运用游标和临时表,循环删除Top
7 楼mm2love2zz(never stop.)回复于 2006-03-02 14:06:36 得分 0
用游标的目的是为了循环
临时表保存取出的符合条件的A表的ID1字段内容Top
8 楼srz007(呵呵)回复于 2006-03-02 14:38:47 得分 0
能给出具体的方法么?Top
9 楼srz007(呵呵)回复于 2006-03-02 17:09:26 得分 0
自己 upTop
10 楼mislrb(上班看看早报,上上CSDN,下班看看电影)回复于 2006-03-03 10:16:39 得分 10
试试
-----------------
DELETE TA WHERE [TIME]<'2002-2-2'
DELETE b from TB b where not exists(select 1 from TA where ID1=b.ID1)
DELETE c from TC c where not exists(select 1 from TA where ID2=C.ID2)
Top
11 楼wgsasd311(自强不息)回复于 2006-03-03 10:36:26 得分 85
--try
select id1 into #1 from ta WHERE [TIME]<'2002-2-2'
select id2 into #2 FROM #1 A,TB B where a.id1=b.id1
DELETE TA WHERE [TIME]<'2002-2-2'
DELETE B FROM #1 a,TB B
WHERE a.id1=b.id1
DELETE B FROM #2 a,TC B
WHERE a.id2=b.id2
drop table #1,#2Top




