mysql删除重复数据

 

删除表内重复数据的一种解决方案:

 

Create Table: CREATE TABLE `tt` (

  `id` int(11) DEFAULT NULL,

  `name` varchar(30) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8

 

200万的数据

100万 id从1到100w name是zz

100条 id从1到100 name是zz

100万 id从1到100w name是mike

100条 id从1到100 name是mike

 

存储过程:

 

新增sizes+1条数据,name为params
CREATE PROCEDURE pro_insert2(in sizes int,in params varchar(30))
begin
declare i int;
start transaction;
set i = 0;
while i<=sizes do
insert into tt values(i,params);
set i=i+1;
end while;
commit;
end
 
mysql命令行操作:插入测试数据
 
call pro_insert2(1000000,'zz');
call pro_insert2(100,'zz');
call pro_insert2(1000000,'mike');
call pro_insert2(100,'mike');
 

mysql> select count(*) from tt;

+----------+

| count(*) |

+----------+

|  2000204 |

+----------+

1 row in set (0.00 sec)

 

Create Table: CREATE TABLE `tt2` (

  `id` int(11) DEFAULT NULL,

  `name` varchar(30) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8

1 row in set (0.00 sec)

 

mysql> insert into tt2 (select distinct * from tt);

Query OK, 2000002 rows affected (51.55 sec)

Records: 2000002  Duplicates: 0  Warnings: 0

 

 

 

mysql> drop table tt;

Query OK, 0 rows affected (0.10 sec)

 

 

mysql> alter table tt2 rename tt;

Query OK, 0 rows affected (0.09 sec)

 

 

mysql> select count(*) from tt;

+----------+

| count(*) |

+----------+

|  2000002 |

+----------+

1 row in set (2.54 sec)

 

到此OK,这种方法效率不是很高,期待更有效率的方法

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值