MySQL千万级数据去重删除,保留主键最小一条数据,响应时间在1秒以内
1年前
阅读 2870
评论 0
喜欢 0
最近有个徒弟问我,MySQL中千万级的数据表要如何快速删除重复值,并只保留一条结果。
他原来的方案是新建一个临时表,然后将重发条件设置为唯一主键,然后导入数据并关闭重复提示继续向下执行。
这个方案虽然有用,但是速度太慢,千万级数据过滤起码得40分钟左右。
所以我就想到了用SQL做SELECT查询DELETE,测试表结构如下:
```sql
CREATE TABLE `channlid` (
`i` int(11) NOT NULL AUTO_INCREMENT,
`id` varchar(48) NOT NULL,
PRIMARY KEY (`i`),
KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4000138 DEFAULT CHARSET=utf8;
```
### 步骤如下:
#### 一、先查询所有重复值:
```sql
SELECT
B.*
FROM
(
SELECT
*
FROM
channlid