背景:

数据库包含重复数据,需要清理掉重复数据,并只保留其中一条。

结论

优化:百万数据查询删除重复数据,耗时从5423秒下降到2秒左右

优化过程:

根据搜索到的资料:

4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录

delete from vitae a

where (a.peopleId,a.seq) in (select peopleId,seq

from vitae group by peopleId,seq having count(*) > 1)

and rowid not in (select min(rowid) from vitae

group by peopleId,seq having count(*)>1)

根据搜索到的资料,编写第一个版本的sql语句:

delete from lcfyjttz where

(fdate, ffjdm, flcdm, ffytype, fgsbz) in(

select fdate,ffjdm,flcdm, ffytype, fgsbz

from lcfyjttz group by fdate,ffjdm,flcdm, ffytype, fgsbz having count(1) > 1)

and rowid not in(

select min(rowid) as rid from lcfyjttz

group byfdate,ffjdm,flcdm, ffytype, fgsbz having count(1) > 1 )

百万数据量的情况下,其执行结果如下:

看这个sql的执行结果就很吓人,作为一个追求3秒级的人,简直忍受不了,开始尝试优化这条sql。经历一段自残式的试错,也终于是实现了。

优化后sql:

DELETE

FROM

LCFYJTTZ c

WHERE

EXISTS (

SELECT

a.ROWID

FROM

LCFYJTTZ a,

(

SELECT

fdate,

ffjdm,

flcdm,

ffytype,

fgsbz,

MIN( ROWID ) rid

FROM

lcfyjttz

GROUP BY

fdate,

ffjdm,

flcdm,

ffytype,

fgsbz

HAVING

count( 1 ) > 1

) b

WHERE

a.FDATE = b.FDATE

AND a.FFJDM = b.FFJDM

AND a.FLCDM = b.FLCDM

AND a.ffytype = b.FFYTYPE

AND a.ROWID != b.rid

AND c.ROWID = a.ROWID

)

其执行结果如下:

在优化过程中,还是学习到很多知识,比如in和exists关键字的使用,with...as的语法使用,我尝试过用但没用上。

mysql类似于excel的删除重复项_sql删除重复项并保留其中一条(含sql优化)相关推荐

  1. oracle删除表某一字段,oracle中删除表中某字段出现重复的信息 保留其中一条

    记得以前有个同事问过我这个,说是以前面试的时候碰到的问题,下面我介绍三种方法. 首先我们在这里创建一个测试表添加相应的测试数据. create table test  (id number,name ...

  2. 如何使用SQL删除某个字段重复的记录,保留其中一条

    应用在使用过程中发现数据表中有一些重复记录,现需要根据 taobao_nick, taobao_id 来过滤出重复记录并删除,保留其中一条记录即可. 1. 首先使用查询语句检查一下重复记录数 sele ...

  3. mysql类似于excel的删除重复项_删除重复数据 excel去除重复数据 怎么筛选重复数据 excel重复数据合并...

    本篇文章主要介绍了"删除重复数据",主要涉及到重复数据方面的内容,对于MySql感兴趣的同学可以参考一下: 最近因为发现数据库中的表有脏数据,需要维护.这些脏数据就是重复数据,需要 ...

  4. mysql 查询删除重复数据,保留其中一条数据

    一.查询重复数据 --------根据多个字段查询重复数据 SELECT* FROMtable_name a WHERE(a.字段1, a.字段2) IN (SELECT字段1,字段2FROMtabl ...

  5. SQL删除表中的重复记录只保留其中一条,最简单的方法:ROW_NUMBER()

    在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢?. 要求:删除表中多余的重复记录,且保留 id 最小的那一条记录. CREATE TABLE #temp_data( id BI ...

  6. oracle 快速移动数据和删除重复数据但保留其中一条数据

    在项目中会遇到将一个表的部分数据移动另一个表中的事情. insert into table1 (id,其他属性) select t.a,t.c...from table2 t 注意属性类型大小要一致 ...

  7. mysql第二条减第一条_Mysql SQL优化

    SQL优化规则 第一条: 尽量全值匹配,也就是说尽量使用等于 第二条: 最佳左前缀原则 如果是复合索引,要遵守最佳左前缀原则,指的是从最左侧列开始并且不跳过索引中的列 如果是按顺序使用的索引列,且有最 ...

  8. mysql怎么删除重复数据并且保留其中一条

    现在有张加班表,一个人同一天只允许申请一次加班,就是加班日期和userid相同的数据应该只有一条,但是现在由于之前没有做限制,导致很多数据重复 怎么通过sql删掉重复数据 思路:先查询重复数据的最大i ...

  9. sql删除表结构_SQL删除表

    sql删除表结构 In a real-time situation, there are scenarios when we would like to remove the table from t ...

最新文章

  1. 解题报告:SP2713 GSS4 - Can you answer these queries IV(GSS线段树八部曲之四)
  2. 【数据结构与算法】之深入解析“学生出勤记录II”的求解思路与算法示例
  3. 提升开发效率的十个工具
  4. 03_MySQL多表事务课堂笔记
  5. RTX5 | 内存池04 - 共享内存用于线程之间的通讯(阻塞方式)- 使用信号量
  6. JNDI学习总结(2)——JNDI数据源的配置
  7. 学习Jsoup(二)
  8. HDU2044 一只小蜜蜂...
  9. 4 pwm 什么时候采样电流_电机控制之电流采样及坐标变换第一部分
  10. 根据录入的计算公式计算_增值税含税怎么计算?
  11. LimeSDR 中文教程 (三)
  12. python使用moviepy包下的VideoFileClip时报错:OSError: [WinError 6] 句柄无效解决方法
  13. Mac网络正常但是所有浏览器无法上网问题解决
  14. Matlab中imag函数用法
  15. 重拾C语言——结构体和共用体
  16. 计算机ei期刊最新版2018,2018年EI收录中文期刊目录
  17. java 距离转坐标_Java经纬读坐标的距离计算
  18. SDUT_人活着系列
  19. 怎么在Word中插入几何画板图形
  20. TortoiseGit GitLab使用教程

热门文章

  1. 802.1ag CFM/802.3ah EFM OAM/Y.1731 ETH OAM学习笔记
  2. 变电站运维,最关键的一点到底是什么?
  3. 服务器如何获取客户端证书,如何在Go HTTPS服务器中获取客户端证书
  4. 【深度学习基础】:线性代数(三)_逆矩阵与伪逆矩阵
  5. git 和github的区别有哪些
  6. linux系统周期任务管理
  7. python手写笔记图片初学_Python处理手写笔记
  8. soundForge 学习笔记
  9. Juniper IP monitor(RPM)
  10. 网络营销实践课程感悟