`

如何高效删除Oracle数据库中的重复数据

阅读更多

重复数据删除技术可以提供更大的备份容量,实现更长时间的数据保留,还能实现备份数据的持续验证,提高数据恢复服务水平,方便实现数据容灾等。 重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样。Oracle数据库重复数据删除技术有如下优势:更大的备份容量、数据能得到持续验证、有更高的数据恢复服务水平、方便实现备份数据的容灾。

  一、删除部分字段重复数据

  先来谈谈如何查询重复的数据吧。

  下面语句可以查询出那些数据是重复的:

  select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1

  将上面的>号改为=号就可以查询出没有重复的数据了。

  想要删除这些重复的数据,可以使用下面语句进行删除:

  delete from 表名 a where 字段1,字段2 in

  (select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)

  上面的语句非常简单,就是将查询到的数据删除掉。不过这种删除执行的效率非常低,对于大数据量来说,可能会将数据库吊死。所以我建议先将查询到的重复的数据插入到一个临时表中,然后对进行删除,这样,执行删除的时候就不用再进行一次查询了。如下:

  CREATE TABLE 临时表 AS

  (select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)

  上面这句话就是建立了临时表,并将查询到的数据插入其中。

  下面就可以进行这样的删除操作了:

  delete from 表名 a where 字段1,字段2 in (select 字段1,字段2 from 临时表);

  这种先建临时表再进行删除的操作要比直接用一条语句进行删除要高效得多。

  这个时候,大家可能会跳出来说,什么?你叫我们执行这种语句,那不是把所有重复的全都删除吗?而我们想保留重复数据中最新的一条记录啊!大家不要急,下面我就讲一下如何进行这种操作。

  在Oracle中,有个隐藏了自动ROWID,里面给每条记录一个唯一的ROWID,我们如果想保留最新的一条记录,我们就可以利用这个字段,保留重复数据中ROWID最大的一条记录就可以了。

  下面是查询重复数据的一个例子:

  select a.rowid,a.* from 表名 a

  where a.rowid !=

  (

  select max(b.rowid) from 表名 b

  where a.字段1 = b.字段1 and

  a.字段2 = b.字段2

  )

  下面我就来讲解一下,上面括号中的语句是查询出重复数据中ROWID最大的一条记录。

  而外面就是查询出除了ROWID最大之外的其他重复的数据了。

 

      由此,我们要删除重复数据,只保留最新的一条数据,就可以这样写了:

  delete from 表名 a

  where a.rowid !=

  (

  select max(b.rowid) from 表名 b

  where a.字段1 = b.字段1 and

  a.字段2 = b.字段2

  )

  随便说一下,上面语句的执行效率是很低的,可以考虑建立临时表,讲需要判断重复的字段、ROWID插入临时表中,然后删除的时候在进行比较。

  create table 临时表 as

  select a.字段1,a.字段2,MAX(a.ROWID) dataid from 正式表 a GROUP BY a.字段1,a.字段2;

  delete from 表名 a

  where a.rowid !=

  (

  select b.dataid from 临时表 b

  where a.字段1 = b.字段1 and

  a.字段2 = b.字段2

  );

  commit;

  二、完全删除重复记录

  对于表中两行记录完全一样的情况,可以用下面语句获取到去掉重复数据后的记录:

  select distinct * from 表名

  可以将查询的记录放到临时表中,然后再将原来的表记录删除,最后将临时表的数据导回原来的表中。如下:

  CREATE TABLE 临时表 AS (select distinct * from 表名);

  truncate table 正式表; --注:原先由于笔误写成了drop table 正式表;,现在已经改正过来

  insert into 正式表 (select * from 临时表);

  drop table 临时表;

  如果想删除一个表的重复数据,可以先建一个临时表,将去掉重复数据后的数据导入到临时表,然后在从临时表将数据导入正式表中,如下:

  INSERT INTO t_table_bak

  select distinct * from t_table;

  三、怎样快速删除Oracle数据库

  最快的方法就进入注册表在运行里输入regedit,依次展开HKEY_LOCAL_MACHINE SOFTWARE,找到Oracle节点。删除。然后删除Oracle数据文件,安装的时候选的路径。最后删除Oracle引导文件,在系统盘符的 Program Files 里面删除Oracle文件夹。

 

-------------------------------------------------------------------------------------------------------------------

查出重复记录  
  SQL>   select   rowid,bm,mc   from   a   where   a.rowid!=(select   max(rowid)   from   a   b   where   a.bm=b.bm   and   a.mc=b.mc);  
   
  ROWID                             BM       MC  
  ------------------   ----   --------------------  
  000000D5.0000.0002   1111   1111  
  000000D5.0001.0002   1112   1111  
  000000D5.0002.0002   1113   1111  
  000000D5.0003.0002   1114   1111  
   
  删除重复记录  
  SQL>   delete   from   a   a   where   a.rowid!=(select   max(rowid)   from   a   b   where   a.bm=b.bm   and   a.mc=b.mc);  

分享到:
评论

相关推荐

    Oracle删除表中的重复数据

    在Oracle数据库管理中,处理重复数据是一项常见的任务,尤其是在数据清洗、数据迁移或者日常的数据维护过程中。重复数据的存在不仅会占用额外的存储空间,还可能导致数据统计错误、数据分析偏差等问题,因此,有效地...

    oracle 查询重复数据

    本文将深入探讨如何在Oracle数据库中查询重复数据,理解SQL语句背后的逻辑,并掌握其实现方法。 ### Oracle查询重复数据的核心概念 #### 1. 重复数据的定义 在数据库术语中,重复数据通常指的是在数据集中存在一个...

    Oracle数据库重复数据删除技术的四大优势

    Oracle数据库重复数据删除技术是一种高效的数据管理策略,其核心优势主要体现在以下几个方面: 1. **更大的备份容量**:Oracle数据库的重复数据删除技术通过识别并消除备份数据中的冗余部分,显著减少了所需的存储...

    oracle中如何删除重复数据

    在Oracle数据库中,删除重复数据是一项常见的数据清洗任务,尤其当表设计不当时,重复数据可能导致数据不一致和分析错误。以下将详细解释如何在Oracle中处理这两种类型的重复数据问题:部分字段重复和完全重复记录。...

    一种基于重复数据删除的Oracle数据库备份系统.pdf

    【文献价值】文章提供了关于如何结合重复数据删除技术优化Oracle数据库备份流程的专业指导,对于IT专业人士来说,这是一个重要的参考文献,可以帮助他们在实际工作中解决类似问题,提升数据库管理的效率和安全性。...

    oracle数据库crt连接工具

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其性能强大,功能丰富,为各种规模的企业提供了数据存储和管理解决方案。为了更加便捷地管理和操作Oracle数据库,DBA(Database Administrator,数据库管理...

    删除重复数据的一种高效的方法(oracle)

    在Oracle数据库管理中,删除重复数据是一个常见的需求,特别是在数据清洗和优化数据库性能时。本文将探讨三种不同的方法来高效地删除`demo`表中的重复数据,并分析它们的执行时间和适用场景。 方法一: 该方法基于...

    在Oracle数据库中如何处理多媒体数据.pdf

    在Oracle数据库中处理多媒体数据是一项重要的任务,尤其是在多媒体技术广泛应用的今天。Oracle数据库作为一个强大的关系型数据库管理系统,提供了丰富的功能来支持多媒体数据的存储、管理和查询。本文将深入探讨...

    Oracle 数据库2天 DBA

    - **Oracle数据库架构:** 包括数据文件、控制文件、重做日志文件等组成部分。 - **Oracle实例:** 是数据库运行时的内存结构和进程集合。 #### 常用Oracle DBA任务 - **监控:** 监控数据库的性能指标,如CPU使用率、I...

    Oracle数据库原理课件.rar

    在Oracle数据库中,数据以表的形式存在,表由行和列组成,每一行代表一条记录,每一列代表一种数据类型。数据库通过SQL(结构化查询语言)进行操作,允许用户查询、插入、更新和删除数据。 Oracle数据库采用关系...

    ORACLE 数据库的统计数据及优化

    本文将重点探讨Oracle数据库中的统计数据及其优化策略,特别是通过使用`dbms_stats`包来提升SQL查询性能。 #### 二、Oracle数据库的统计数据 统计数据是指Oracle数据库中关于表、索引等对象的数据分布信息。这些...

    oracle下如何删除重复数据的几种方法

    本文介绍了在Oracle数据库中处理重复数据的几种方法。无论是部分字段重复还是完全重复的记录,都可以通过创建临时表的方式提高删除重复记录的效率。此外,在处理重复数据时,还应考虑到保留最新或最旧记录的需求,...

    oracle数据库设计原则

    Oracle数据库设计是构建高效、稳定、可扩展的数据库系统的关键步骤。遵循良好的设计原则能够确保数据的完整性和系统的性能。以下是一些核心的数据库设计原则和技巧,特别针对Oracle数据库: 1. **第三范式(3NF)**...

    Oracle数据库SQL优化总结

    7. **删除重复记录**:使用ROWID进行删除,可以高效去除重复行。 8. **使用TRUNCATE替代DELETE**:TRUNCATE用于清空表,它比DELETE更高效,因为不涉及回滚信息,但请注意,TRUNCATE是DDL,不可恢复。 9. **频繁...

    oracle数据库概述.pptx

    在Oracle数据库中,SQL语句用于插入、更新、删除和查询数据。SQL中的函数如MAX、MIN、AVG等则用于对数据进行聚合计算。多表连接和子查询是高级SQL技巧,用于处理多个表间的数据关联,子查询可以嵌套在主查询中,以...

    oracle数据库优化大全(面试和学习都适用)

    Oracle 数据库优化的经验,涵盖了选择最有效率的表名顺序、WHERE 子句中的连接顺序、SELECT 子句中避免使用 ‘*‘、减少访问数据库的次数、使用 DECODE 函数来减少处理时间、整合简单、无关联的数据库访问、删除重复...

    构建最高可用oracle数据库系统:oracle 11gr2 rac管理、维护与性能优化

    由于提供的文件信息中部分内容仅...以上知识点旨在涵盖从基础概念到高级技术细节,从安装配置到日常管理维护以及性能优化的全面知识体系,帮助读者或数据库管理员构建和管理一个稳定、高效、高可用的Oracle数据库系统。

    探讨煤炭企业中ORACLE数据库的应用.pdf

    使用DELETE命令删除重复数据,根据数据量大小选择IN子句或SELECT子句以提高删除速度;在查找不同数据记录时,通过NOT EXISTS子句来提高查找效率。\n\n2. **数据管理与安全性**\n ORACLE数据库提供了一致性和完整性...

    oracle数据库性能优化宝典

    10. **删除重复记录**:冗余数据可能导致额外的存储和处理开销,定期清理重复记录有助于保持数据库整洁和高效。 11. **用TRUNCATE替代DELETE**:删除大量数据时,TRUNCATE操作比DELETE快,因为它不记录单个行的删除...

Global site tag (gtag.js) - Google Analytics