本文实例讲述了删除MySQL重复数据的方法。分享给大家供大家参考。具体方法如下:
项目背景
在最近做的一个linux性能采集项目中,发现线程的程序入库很慢,再仔细定位,发现数据库里面很多冗余数据。因为在采集中,对于同一台设备,同一个时间点应该只有一个数据,然而,数据库中存入了多个数据。对于如何造成了这个结果,一时没有想清楚,但为了解决入库慢的问题,首先要删除冗余数据。
问题描述
数据库的表结构很简单,如下:
复制代码 代码如下:
+----------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| id | varchar(255) | NO | PRI | NULL | |
| conf_id | varchar(255) | NO | MUL | NULL | |
| insert_time | datetime | YES | | NULL | |
| cpu_usage | float(11,2) | YES | | NULL | |
| memory_usage | float(11,2) | YES | | NULL | |
| io_usage_write | float(11,2) | YES | | NULL | |
| io_usage_read | float(11,2) | YES | | NULL | |
+----------------+--------------+------+-----+---------+-------+
复制代码 代码如下:
select count(*) from perf_linux;
查询所有时间点不同设备的数据量
复制代码 代码如下:
select count(distinct conf_id, insert_time) from perf_linux ;
由上面的数据可以看出,数据冗余了10倍左右。
再按时间分组看一下:
复制代码 代码如下:
select id, conf_id ,insert_time from perf_linux order by insert_time, conf_id;
复制代码 代码如下: