作者:J品1北京天7W乐 | 来源:互联网 | 2014-06-09 00:50
mysql删除重复数据删除表内重复数据的一种解决方案:www.2cto.comCreateTable:CREATETABLE`tt`(`id`int(11)DEFAULTNULL,`name`varchar(30)DEFAULTNULL)ENGINEInnoDBDEFAULT...
删除表内重复数据的一种解决方案:
www.2cto.com
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
www.2cto.com
mysql命令行操作:插入测试数据
call pro_insert2(1000000,&#39;zz&#39;);
call pro_insert2(100,&#39;zz&#39;);
call pro_insert2(1000000,&#39;mike&#39;);
call pro_insert2(100,&#39;mike&#39;);
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,这种方法效率不是很高,期待更有效率的方法.