--复习autotrace:
SET AUTOTRACE OFF               --不生成AUTOTRACE 报告,这是缺省模式
SET AUTOTRACE ON EXPLAIN        --AUTOTRACE只显示优化器执行路径报告
SET AUTOTRACE ON STATISTICS     --只显示执行统计信息
SET AUTOTRACE ON                --包含执行计划和统计信息
SET AUTOTRACE TRACEONLY         --同set autotrace on,但是不显示查询输出--案例模拟
--查询原始表:
23:13:36 SQL> select * from emp;EMPNO ENAME      JOB              MGR HIREDATE            SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ------------ ---------- ---------- ----------7698 BLAKE      MANAGER         7839 01-MAY-81          2850                    307782 CLARK      MANAGER         7839 09-JUN-81          2450                    107788 SCOTT      ANALYST         7566 19-APR-87          3000                    207839 KING       PRESIDENT            17-NOV-81          5000                    107844 TURNER     SALESMAN        7698 08-SEP-81          1500          0         307876 ADAMS      CLERK           7788 23-MAY-87          1100                    207900 JAMES      CLERK           7698 03-DEC-81           950                    307902 FORD       ANALYST         7566 03-DEC-81          3000                    207934 MILLER     CLERK           7782 23-JAN-82          1300                    107369 SMITH      CLERK           7902 17-DEC-80           800                    207499 ALLEN      SALESMAN        7698 20-FEB-81          1600        300         307521 WARD       SALESMAN        7698 22-FEB-81          1250        500         307566 JONES      MANAGER         7839 02-APR-81          2975                    207654 MARTIN     SALESMAN        7698 28-SEP-81          1250       1400         3014 rows selected.Elapsed: 00:00:00.09--模拟,插入重复记录
INSERT INTO emp select * from emp;--检查重复记录
23:13:39 SQL> SELECT COUNT(empno), empno FROM emp GROUP BY empno HAVING COUNT(empno) > 1;COUNT(EMPNO)      EMPNO
------------ ----------2       77822       78392       78442       76982       79022       75212       77882       79342       75662       76542       74992       78762       79002       736914 rows selected.Elapsed: 00:00:00.04--方法一(只保留ROWID最小的记录):
DELETE FROM emp
WHERE  empno IN(SELECT empno FROM emp GROUP BY empno HAVING COUNT(empno) > 1)
AND    ROWID NOT IN(SELECT MIN(ROWID) FROM emp GROUP BY empno HAVING COUNT(empno) > 1);[lubinsu@200-168-46-3 shell_monitor]$ sqlplus lubinsu/lubinsuSQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 18 23:09:34 2013Copyright (c) 1982, 2005, Oracle.  All rights reserved.Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options23:09:46 SQL> set timing on
23:09:51 SQL> set autotrace traceonly
23:09:58 SQL> set linesize 200
23:17:32 SQL> DELETE FROM emp
23:17:38   2  WHERE  empno IN
23:17:40   3         (SELECT empno FROM emp GROUP BY empno HAVING COUNT(empno) > 1)
23:17:45   4  AND    ROWID NOT IN
23:17:49   5         (SELECT MIN(ROWID) FROM emp GROUP BY empno HAVING COUNT(empno) > 1);14 rows deleted.Elapsed: 00:00:00.07Execution Plan
----------------------------------------------------------
Plan hash value: 319293636------------------------------------------------------------------------------------
| Id  | Operation               | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------------
|   0 | DELETE STATEMENT        |          |     1 |    41 |     9  (34)| 00:00:01 |
|   1 |  DELETE                 | EMP      |       |       |            |          |
|*  2 |   HASH JOIN ANTI        |          |     1 |    41 |     9  (34)| 00:00:01 |
|*  3 |    HASH JOIN SEMI       |          |     1 |    29 |     6  (34)| 00:00:01 |
|   4 |     TABLE ACCESS FULL   | EMP      |    14 |   224 |     2   (0)| 00:00:01 |
|   5 |     VIEW                | VW_NSO_1 |     1 |    13 |     3  (34)| 00:00:01 |
|*  6 |      FILTER             |          |       |       |            |          |
|   7 |       SORT GROUP BY     |          |     1 |     4 |     3  (34)| 00:00:01 |
|   8 |        TABLE ACCESS FULL| EMP      |    14 |    56 |     2   (0)| 00:00:01 |
|   9 |    VIEW                 | VW_NSO_2 |     1 |    12 |     3  (34)| 00:00:01 |
|* 10 |     FILTER              |          |       |       |            |          |
|  11 |      SORT GROUP BY      |          |     1 |    16 |     3  (34)| 00:00:01 |
|  12 |       TABLE ACCESS FULL | EMP      |    14 |   224 |     2   (0)| 00:00:01 |
------------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------2 - access(ROWID="$nso_col_1")3 - access("EMPNO"="$nso_col_1")6 - filter(COUNT("EMPNO")>1)10 - filter(COUNT("EMPNO")>1)Statistics
----------------------------------------------------------1  recursive calls15  db block gets16254  consistent gets0  physical reads4256  redo size925  bytes sent via SQL*Net to client1116  bytes received via SQL*Net from client6  SQL*Net roundtrips to/from client3  sorts (memory)0  sorts (disk)14  rows processed--方法二、使用分析函数(只保留ROWID最小的记录):
23:17:57 SQL> rollback;Rollback complete.Elapsed: 00:00:00.02
23:19:11 SQL> DELETE FROM emp
23:22:22   2  WHERE  ROWID IN (SELECT ROWID
23:22:28   3                   FROM   (SELECT ROWID row_id,
23:22:32   4                                  row_number() over(PARTITION BY empno ORDER BY ROWID ASC) row_num
23:22:37   5                           FROM   emp e) v
23:22:41   6                   WHERE  v.row_num >= 2);14 rows deleted.Elapsed: 00:00:00.04Execution Plan
----------------------------------------------------------
Plan hash value: 3671588261-----------------------------------------------------------------------------------------
| Id  | Operation                    | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------
|   0 | DELETE STATEMENT             |          |     1 |    24 |     5  (40)| 00:00:01 |
|   1 |  DELETE                      | EMP      |       |       |            |          |
|   2 |   NESTED LOOPS               |          |     1 |    24 |     5  (40)| 00:00:01 |
|   3 |    VIEW                      | VW_NSO_1 |    14 |   168 |     3  (34)| 00:00:01 |
|   4 |     SORT UNIQUE              |          |     1 |   350 |            |          |
|*  5 |      VIEW                    |          |    14 |   350 |     3  (34)| 00:00:01 |
|   6 |       WINDOW SORT            |          |    14 |   224 |     3  (34)| 00:00:01 |
|   7 |        TABLE ACCESS FULL     | EMP      |    14 |   224 |     2   (0)| 00:00:01 |
|   8 |    TABLE ACCESS BY USER ROWID| EMP      |     1 |    12 |     1   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------5 - filter("V"."ROW_NUM">=2)Statistics
----------------------------------------------------------1  recursive calls18  db block gets5434  consistent gets0  physical reads4448  redo size925  bytes sent via SQL*Net to client1190  bytes received via SQL*Net from client6  SQL*Net roundtrips to/from client3  sorts (memory)0  sorts (disk)14  rows processed--方法三、
23:22:45 SQL> DELETE FROM emp p WHERE ROWID NOT IN(SELECT MAX(ROWID) FROM emp i WHERE i.empno = p.empno);0 rows deleted.Elapsed: 00:00:00.13Execution Plan
----------------------------------------------------------
Plan hash value: 1987023575---------------------------------------------------------------------------------
| Id  | Operation             | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------
|   0 | DELETE STATEMENT      |         |    13 |   533 |     6  (34)| 00:00:01 |
|   1 |  DELETE               | EMP     |       |       |            |          |
|*  2 |   HASH JOIN           |         |    13 |   533 |     6  (34)| 00:00:01 |
|   3 |    VIEW               | VW_SQ_1 |    14 |   350 |     3  (34)| 00:00:01 |
|   4 |     SORT GROUP BY     |         |    14 |   224 |     3  (34)| 00:00:01 |
|   5 |      TABLE ACCESS FULL| EMP     |    14 |   224 |     2   (0)| 00:00:01 |
|   6 |    TABLE ACCESS FULL  | EMP     |    14 |   224 |     2   (0)| 00:00:01 |
---------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------2 - access("EMPNO"="P"."EMPNO")filter(ROWID<>"VW_COL_1")Statistics
----------------------------------------------------------168  recursive calls0  db block gets10954  consistent gets0  physical reads0  redo size925  bytes sent via SQL*Net to client1008  bytes received via SQL*Net from client6  SQL*Net roundtrips to/from client2  sorts (memory)0  sorts (disk)0  rows processed--方法四、和方法三是类似的:
Elapsed: 00:00:00.03
23:28:25 SQL> DELETE FROM emp p WHERE ROWID < (SELECT MAX(ROWID) FROM emp i WHERE i.empno = p.empno);14 rows deleted.Elapsed: 00:00:00.06Execution Plan
----------------------------------------------------------
Plan hash value: 1987023575---------------------------------------------------------------------------------
| Id  | Operation             | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------
|   0 | DELETE STATEMENT      |         |     1 |    41 |     6  (34)| 00:00:01 |
|   1 |  DELETE               | EMP     |       |       |            |          |
|*  2 |   HASH JOIN           |         |     1 |    41 |     6  (34)| 00:00:01 |
|   3 |    VIEW               | VW_SQ_1 |    14 |   350 |     3  (34)| 00:00:01 |
|   4 |     SORT GROUP BY     |         |    14 |   224 |     3  (34)| 00:00:01 |
|   5 |      TABLE ACCESS FULL| EMP     |    14 |   224 |     2   (0)| 00:00:01 |
|   6 |    TABLE ACCESS FULL  | EMP     |    14 |   224 |     2   (0)| 00:00:01 |
-----------------------------------------------------------------------------------方法五、使用group by,同样类似三四
23:30:01 SQL> DELETE FROM emp p WHERE ROWID NOT IN (SELECT MAX(ROWID) FROM emp i GROUP BY i.empno);14 rows deleted.Elapsed: 00:00:00.06Execution Plan
----------------------------------------------------------
Plan hash value: 3239269824----------------------------------------------------------------------------------
| Id  | Operation             | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------
|   0 | DELETE STATEMENT      |          |     1 |    24 |     6  (34)| 00:00:01 |
|   1 |  DELETE               | EMP      |       |       |            |          |
|*  2 |   HASH JOIN ANTI      |          |     1 |    24 |     6  (34)| 00:00:01 |
|   3 |    TABLE ACCESS FULL  | EMP      |    14 |   168 |     2   (0)| 00:00:01 |
|   4 |    VIEW               | VW_NSO_1 |    14 |   168 |     3  (34)| 00:00:01 |
|   5 |     SORT GROUP BY     |          |    14 |   224 |     3  (34)| 00:00:01 |
|   6 |      TABLE ACCESS FULL| EMP      |    14 |   224 |     2   (0)| 00:00:01 |
----------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------2 - access(ROWID="$nso_col_1")Statistics
----------------------------------------------------------0  recursive calls17  db block gets10836  consistent gets0  physical reads4324  redo size926  bytes sent via SQL*Net to client1002  bytes received via SQL*Net from client6  SQL*Net roundtrips to/from client2  sorts (memory)0  sorts (disk)14  rows processed--总结,还是自己想出来的方法二效率高,:)

转载于:https://www.cnblogs.com/pangblog/p/3268687.html

【Oracle】删除重复记录相关推荐

  1. oracle sql删除重复,【转帖】SQL Oracle删除重复记录

    1.Oracle删除重复记录. 删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录. delete from people where peopleI ...

  2. oracle 删除重复记录

    比如现在有一人员表 (表名:peosons) 若想将姓名.身份证号.住址这三个字段完全相同的记录查询出来 select p1.*   from persons  p1,persons  p2   wh ...

  3. oracle如何删除重复数据第一条,oracle删除重复数据保留第一条记录

    oracle删除重复数据保留第一条记录 1.查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断select * from 表 where Id in (select Id from 表 gr ...

  4. ORACLE查询删除重复记录

    比如现在有一人员表 (表名:peosons) 若想将姓名.身份证号.住址这三个字段完全相同的记录查询出来 复制代码 代码如下: select p1.*   from persons  p1,perso ...

  5. Oracle几种查找和删除重复记录的方法总结

    转载自:http://www.csdn.net/article/1970-01-01/278287 平时工作中可能会遇到当试图对库表中的某一列或几列创建唯一索引时,系统提示 ORA-01452 :不能 ...

  6. oracle 视图去重复,CSS_Oracle几种查找和删除重复记录的方法总结,平时工作中可能会遇到当试图 - phpStudy...

    Oracle几种查找和删除重复记录的方法总结 平时工作中可能会遇到当试图对库表中的某一列或几列创建唯一索引时,系统提示 ORA-01452 :不能创建唯一索引,发现重复记录. 下面总结一下几种查找和删 ...

  7. 【转贴】Oracle查询重复数据与删除重复记录方法

    Oracle查询重复数据与删除重复记录方法 比如现在有一人员表 (表名:peosons) 若想将姓名.身份证号.住址这三个字段完全相同的记录查询出来 select p1.* from persons ...

  8. oracle 查找不重复的数据,oracle不用distinct查找不重复记录和删除重复记录

    1.oracle中怎么不用distinct查找不重复记录,users表有字段userid,username,password? 答: 第一种方法: select userid,username,pas ...

  9. ORACLE查询删除重复记录三种方法

    比如现在有一人员表 (表名:peosons) 若想将姓名.身份证号.住址这三个字段完全相同的记录查询出来 复制代码代码如下: select p1.*    from persons  p1,perso ...

  10. Oracle数据库删除重复记录的方法

    Oracle数据库删除重复记录的方法,做项目的时候,一位同事导数据的时候,不小心把一个表中的数据全都搞重了,也就是说,这个表里所有的记录都有一条重复的.这个表的数据是千万级的,而且是生产系统.也就是说 ...

最新文章

  1. TensorFlow常用Python扩展包
  2. 要想进入顶级数据公司,2020年数据科学10大技能帮你加分
  3. 填问卷赢280元SaaS峰会门票 与Salesforce、Zenefits现场交流!
  4. 图像滤波与OpenCV中的图像平滑处理
  5. RabbitMQ 核心部分
  6. 挖洞技巧:如何绕过URL限制
  7. 26 JSX深度剖析与使用技巧
  8. System.Drawing.Color.FromArgb(144,238,255);
  9. NB-IOT连接移动onenet平台流程
  10. 万万没想到,EfficientNet居然这么火!
  11. sql azure 语法_Azure SQL Server中的CREATE DATABASE语句概述
  12. 功率 dbm 和 mw 的换算
  13. redis 过期删除策略和淘汰策略 -redis设计与实现笔记
  14. 155款安卓开源项目源码整理+20个Android必备第三方框架
  15. Python 计时器倒计时弹窗提醒
  16. 电饭锅面包的做法大全 电饭锅怎么做面包
  17. 路路通软件android版,家校路路通app
  18. 印象笔记的使用技巧总结
  19. Verilog RTL 代码设计——译码器计数器
  20. Python中动态编译函数compile(source, filename, mode, ......)参数filename的作用是什么?...

热门文章

  1. 使用 k8s 搭建 confluence 6.10.x 版本
  2. java web-inf_对JavaWeb项目中WEB-INF目录的理解
  3. Linux下的JDK1.5安装
  4. Tomcat如何配置X-Frame-Options头
  5. input做成label效果
  6. mysql引擎机制_MySQL引擎特性:InnoDB同步机制
  7. 【NOILinux】VmWare15使用技巧
  8. c语言程序一些常见的不足,C语言常见错误分析及解决方法
  9. 通风技术交底书范文_通风与空调工程风管安装安全技术交底
  10. str_replace()函数