吃相难看的mysql重复数据删除
需求描述
数据库为mysql , 清理数据要对重复历史数据做删除操作, 环境有以下特点
- 目标表没有主键
- 不允许做表结构变动
- 重复数据并非全部字段重复, 只是部分标志字段重复
解决思路与困境解决
最初的思路是按照指定字段找出重复记录集, 每组仅保留一条记录, 其余数据做删除处理
伪sql实现如下:
delete from r_data_1d a
where (a.c_res_id,a.c_task_time) in (select c_res_id,c_task_time from r_data_1d group by c_res_id,c_task_time having count(*) > 1)
and a.rowid not in (select min(rowid) from r_data_1d group by c_res_id,c_task_time having count(*)>1)
困境及解决方案:
1. mysql不支持rowid, 且表中没有主键.
解决方案: 采取 收集-删除-增补 三步走方式进行处理, 此处引进临时表 r_data_1d_temp
2. 处理删除步骤时, 发现mysql不支持对目标表进行删除中查询操作, 如该语句
delete from a where a.b in (select b from a group by b having count(*) > 1)
解决方案: 采取 收集-删除 两步完成该步骤, 此处引进临时表 r_data_1d_del_temp
最终方案
最终对上述步骤进行了整合, 简单描述为 收集补全-收集删除信息-执行删除-执行补全
最终sql如下:
create r_data_1d_temp
select c_business_id, c_res_id , c_sub_res_id , max(c_in_avg), max(c_in_min), max(c_in_max), max(c_out_avg), max(c_out_min), max(c_out_max), c_task_time , c_tag1, c_tag2 from (
select * from r_data_1d a where (a.c_res_id,a.c_task_time) in (select c_res_id,c_task_time from r_data_1d group by c_res_id,c_task_time having count(*) > 1) )a
group by c_business_id, c_res_id, c_sub_res_id, c_task_time, c_tag1, c_tag2;create table r_data_1d_del_temp select c_res_id,c_task_time from r_data_1d group by c_res_id,c_task_time having count(*) > 1;delete from r_data_1d
where (c_res_id,c_task_time) in (select * from r_data_1d_del_temp);drop table r_data_1d_del_temp;insert into r_data_1d select * from r_data_1d_temp;drop table r_data_1d_temp;
后记
目前该实现还是较为难看, 贴出来只是抛砖引玉, 希望能请到大神给出更优的解
吃相难看的mysql重复数据删除相关推荐
- mysql 删除mul key_删除MySQL重复数据的方法
本文实例讲述了删除MySQL重复数据的方法.分享给大家供大家参考.具体方法如下: 项目背景 在最近做的一个linux性能采集项目中,发现线程的程序入库很慢,再仔细定位,发现数据库里面很多冗余数据.因为 ...
- IBM结盟飞康VTL提供高性能备份与重复数据删除
全球磁盘式数据保护解决方案领导厂商,美国飞康软件公司 (NASDAQ:FALC) 近日对外宣布,与IBM公司建立Indirect OEM (IOEM)合作伙伴关系.根据IBM Indirect OEM ...
- 深入理解数据压缩与重复数据删除
原文地址:http://blog.csdn.net/liuaigui/article/details/6324133 [导读] 数据压缩与重复数据删除两种技术有何区别与联系呢?实际中又该如何正确应用呢 ...
- 重复数据删除技术概述
重复数据删除技术概述 一. 重复数据删除的分类 1. 源端重复数据删除和目标端重复数据删除 源端消重在数据源进行,传输的是已经消重后的数据,能够节省网络带宽,但会占用大量源端系统资源. ...
- Hyper-v Server重复数据删除技术
Hyper-v Server重复数据删除技术 老衲听说windows Server 2012中新增了一项技术叫做重复数据删除,据说这个重复数据删除可以大大的节省磁盘的空间,下面我们来看看什么是重复数据 ...
- EMC升级Celerra 支持闪存及重复数据删除
WatchStor独家译文]虽然在上周接受采访时,EMC公司存储部门总裁David A.Donatelli就表示EMC近期将发布大量新品,但直到美国时间上周末,EMC才正式发布了其升级Celer ...
- Windows 8.1 重复数据删除
我们知道windowsserver2012中有一种功能,重复数据删除,实际上在windows8.1中也支持,以下就是就如何在windows8.1中开启重复数据删除 概述如下: 1.到http://sd ...
- 重复数据删除(De-duplication)技术研究
http://godchenmeng.iteye.com/blog/752567 继续推荐刘爱贵同学的重复数据删除dedupe 转载于:https://www.cnblogs.com/cloudsto ...
- Windows 8.1 重复数据删除——规划部署(二)
一.规划部署目标 Windows 8.1&Server 2012 的重复数据删除设计为安装到主要数据卷上,而无需添加任何附加的专用硬件.这意味着你可以安装和使用该功能,而不会影响服务器上 ...
最新文章
- s5pv210 uboot-2012-10移植(七) 之支持SD卡
- Apache Flink 零基础入门(五)Flink开发实时处理应用程序
- ./dmitry -p ip或者域名 -f -b
- 集群环境下,你不得不注意的ASP.NET Core Data Protection 机制
- c++ 函数参数问题
- 猎豹移动傅盛:区块链将重塑整个社会关系,CEO恐将职位不保
- thymeleaf th:href 多个参数传递格式
- 改善C#公共程序类库质量的10种方法
- matlab int 求定积分
- unity3d 各种优化综合
- 学生签到系统c代码_手把手教你做一个Java web学生信息、选课、签到考勤、成绩管理系统附带完整源码及视频开发教程...
- 苹果手机绕激活锁之亲身体验
- 【新书推荐】【2020】电力系统优化问题的方法、算法及MATLAB程序
- Java实现QQ邮箱验证码发送
- 求1-1/2+1/3-1/4+...+1/99-1/100。
- 2022-06-08你抢不到的可达鸭,芯片成本只要几块钱KFC(-JPG)
- FPGA error:buffers of the same direction cannot be placed in series.
- 南都周刊:别了,老兵乔布斯
- 可汗学院统计学 task 3
- 物联网Lora模块从入门到精通(一)Lora模块初识-新大陆物联网