日期:2014-05-17  浏览次数:20837 次

怎么实时的删除重复的纪录
有一个程序,一直在插入数据,
程序插入的数据有重复的,程序不是我们做的所以不能修改
现在想实时的删除重复的数据,数据量很大的,现在已经30万数据
每天还要插入2000条,以后还会更多。
5分钟删除一次也可以,
这个要怎么做,
编写触发器,每条纪录进行检索,查询相同的么,这个好像效率太低了
有没有好的办法

------解决方案--------------------
触发器不合适,还是定时删比较好
------解决方案--------------------
将重复字段建立唯一索引么,这样重复的就插入不了了,也不用定期删除了。
------解决方案--------------------
只能用触发器处理
建议用触发器把不同的记录插到另一个表。然后你们就用那个新表了。
------解决方案--------------------
如果同时要插入大量数据,用触发器效率不高吧?
定时删除的话,你建一个JOB就行了啊。给一个每天定时执行多次JOB的例子,
例如每天中午12:00,下午5:30执行:(作者: oldwain,  出处:oldwain 's Blog)
job每半小时执行一次调用外层procedure, 由外层procedure判断时间决定是否执行原来的procedure.

< <>

begin
dbms_job.submit(job => :job,
what => 'pshell; ',
next_date => sysdate,
interval => 'sysdate+30/60/24 ';
commit;
end;
create procedure pshell as
begin
if to_char(sysdate, 'hh24:mi ") > '12:00 ' and to_char(sysdate, 'hh24:mi ") < '12:30 ' then
p;
end if;
if to_char(sysdate, 'hh24:mi ") > '17:30 ' and to_char(sysdate, 'hh24:mi ") < '18:00 ' then
p;
end if;
end;
--就是做两个过程,一个用来判断时间,一个执行需求。
------解决方案--------------------
我觉得用作业很好.
------解决方案--------------------
我觉得那不是办法,可以对插入的表建触发器,不让插入重复的数据,从而避免删除重复数据的操作。
------解决方案--------------------
不建议使用job或者trigger,性能都比较底下,最好的办法还是使用数据完整性校验 (如PK, constraints等).