我有四张表,表t1,t2,t3,t4。
其中表t1与t2,t3,t4相关联。删记录的时候t2,t3,t4很快,t1非常慢。
具体是这样:
现在各表各有170万条左右记录,每天还以10万条左右的记录往里写。与此同时,我想删旧的记录,但是现在删表t1太慢,用SQL语句试了一下,从t1删一条记录用时8秒!!!!请高手指教!!!!
其中表t1与t2,t3,t4相关联。删记录的时候t2,t3,t4很快,t1非常慢。
具体是这样:
现在各表各有170万条左右记录,每天还以10万条左右的记录往里写。与此同时,我想删旧的记录,但是现在删表t1太慢,用SQL语句试了一下,从t1删一条记录用时8秒!!!!请高手指教!!!!
有的话肯定会慢的
如果要删除所有数据就用truncate table t1会更好
2.在JOB中定时(最好在每天凌晨3:00)执行。
CREATE OR REPLACE PROCEDURE DeleteTest
AS
BEGIN
DELETE FROM TABLE WHERE 时间字段<trunc(sysdate)-1;COMMIT;
END DeleteTest;
/这个是JOB
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'CARTE.INSERTWEIGHT;'
,next_date => to_date('12-11-2008 08:00:00','dd/mm/yyyy hh24:mi:ss')
,interval => 'TRUNC(SYSDATE+1)+1/24'
,no_parse => TRUE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
END;
/commit;
2 cursor l_cur is
3 select rowid from aa;
4
5 type ridArray is table of rowid index by binary_integer;
6
7 l_rowid ridArray;
8 begin
9 open l_cur;
10 loop
11 fetch l_cur bulk collect
12 into l_rowid limit 10000;
13
14 forall i in 1 .. l_rowid.count
15 delete from aa where rowid = l_rowid(i);
16 commit;
17
18 exit when l_cur%notfound;
19 end loop;
20 close l_cur;
21 end;
22 /