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

解决方案 »

  1.   

    如果同时要插入大量数据,用触发器效率不高吧?
    定时删除的话,你建一个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;
    --就是做两个过程,一个用来判断时间,一个执行需求。
      

  2.   

    pepsirjl() 
    我觉得那不是办法,可以对插入的表建触发器,不让插入重复的数据,从而避免删除重复数据的操作。
    ====================================================================================
    建触发器很不好。如果插入大数据量,比如上千万条数据,那么你每插一条就要触发一次,这就要触发上千万次。反之建JOB,只5分钟执行一次。谁的效率高?
      

  3.   

    不建议使用job或者trigger,性能都比较底下,最好的办法还是使用数据完整性校验 (如PK, constraints等).
      

  4.   

    感谢阿!用job搞定了(已经在本地数据库测试成功了),
    数据完整性约束,行不通的,数据不是完全一样的,判断很麻烦的,要满足3个条件才算一样的。
    如果用trigger 判断,现在,插入一条数据要25秒,汗!好了,感谢各位了,散分