> 데이터 베이스 > MySQL 튜토리얼 > oracle 删除大表内的重复数据

oracle 删除大表内的重复数据

WBOY
풀어 주다: 2016-06-07 16:35:43
원래의
1449명이 탐색했습니다.

因为一些原因数据库中的一张表(2kw+数据)没有建立主键,并且随着时间的增加产生了大量的重复数据,我通过以下方式进行数据去重: 原理:即使是所有业务字段都一样的两条数据他的rowid也是不一样的。 首先按照业务要求找出哪些字段重复的算重复数据,我是这

因为一些原因数据库中的一张表(2kw+数据)没有建立主键,并且随着时间的增加产生了大量的重复数据,我通过以下方式进行数据去重:

原理:即使是所有业务字段都一样的两条数据他的rowid也是不一样的。

首先按照业务要求找出哪些字段重复的算重复数据,我是这样的,以下字段全部一致就认为是重复数据: hphm,hpzl,wfsj,wfxw,jszh
表名:VIOLATION_USE

此表为分区表,查此表分区详情:

SELECT * FROM USER_TAB_PARTITIONS WHERE TABLE_NAME =’VIOLATION_USE’;

USER_TAB_PARTITIONS

查询表使用的分区

可以看到此表有10个分区:SYS_P51 – SYS_P60;

查询重复数据里的最大的rowid,然后删除rowid 在里面的数据,因为是分区表所以可以分区操作,否则时间会非常长(ps我在服务器上操作一晚上也没成功):

delete from violation_use PARTITION(SYS_P51) where rowid in (
select rid from 
(
select max(rowid) rid,count(*)
from violation_use
group by hphm,hpzl,wfsj,wfxw,jszh
having count(*)>1
) 
);
로그인 후 복사

重复执行直到删除所有重复数据。

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿