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

merge、delete、/*+ BYPASS_UJVC*/,删除效率

--删除的数据量为2万条 
--table1 数据量为百万级,table2为时间窗 仅一条记录
DELETE /*+ BYPASS_UJVC*/
FROM (SELECT 
       A.*
        FROM table1 A, table2 B
       WHERE A.INSERTDATE >= B.ETLNOWSTATDATE 
AND A.INSERTDATE <= B.ETLLASTENDDATE) ;
--执行0.01s

delete from table1 a
where a.INSERTDATE >= (select b.statdate from table2  b)
and a.INSERTDATE <= (select b.enddate from table2  b)
--执行90s

如上,执行的时间差距非常大。
但是第一中删除的方法,不能确定删除的是A表还是B表。
在我自己测试的时候,有时候只删除A表,有时候俩个表的数据都被删除了。
------解决方案--------------------
路过关注下,共求结果。顶下!
------解决方案--------------------
引用:
引用:SQL code12345678910111213--对于你第一种方法,我测试了一下--删除起作用的是右面的表,这种写法删除的是 B表DELETE /*+ BYPASS_UJVC*/FROM (SELECT        A.*        FROM table1 A, table2 B       WHERE A.INSER……


存储过程封装,让etl 调用存储过程。