建立一张表tb_a(id varchar2(10), name varchar2(20));
插入数据:001 张三, 002 李四,001 张三,003 王武
删除其中的重复行。方法一:delete from tb_a s
where rowid not in (
select max(rowid) from tb_a b where s.id=b.id and a.name=b.name)
问题一:方法一中的子查询select max(rowid) from tb_a b where s.id=b.id and a.name=b.name会执行多少次? 方法二:delete from tb_a s
where rowid not in (
select max(rowid) from tb_a group by id,name)
问题二:方法二中的子查询select max(rowid) from tb_a group by id,name会执行多少次?
问题三:方法一和方法二哪个效率高?
插入数据:001 张三, 002 李四,001 张三,003 王武
删除其中的重复行。方法一:delete from tb_a s
where rowid not in (
select max(rowid) from tb_a b where s.id=b.id and a.name=b.name)
问题一:方法一中的子查询select max(rowid) from tb_a b where s.id=b.id and a.name=b.name会执行多少次? 方法二:delete from tb_a s
where rowid not in (
select max(rowid) from tb_a group by id,name)
问题二:方法二中的子查询select max(rowid) from tb_a group by id,name会执行多少次?
问题三:方法一和方法二哪个效率高?
但基本上会走HASH JOIN。两种方法中,都至少对该表2次全表扫描,方法一会采用HASH JOIN,方法二会用HASH JOIN ANTI。如果数据量大的话,第一种方案比较好。
但最终你还是根据EXPLAIN PLAN加实际测试来决定。