首页 > 数据库 > MySQL > mysql中,删除重复记录的方法及疑问(2)
mysql下,基表较大,采用临时过渡表的方法,性能如何?
1、确认一下基表和过渡表的数据量。
mysql> select count(*) from test;
+----------+
| count(*) |
+----------+
| 1572864 |
+----------+
1 row in set (2.48 sec)
mysql> select count(*) from tmp;
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (0.02 sec)
2、过滤重复记录,将基表数据插入过渡表
mysql> insert into tmp select distinct * from test;
Query OK, 3 rows affected (3.27 sec)
Records: 3 Duplicates: 0 Warnings: 0
3、删除基表数据,过渡表数据回插。
mysql> truncate table test;
Query OK, 1572864 rows affected (29.44 sec)
mysql> insert into test select * from tmp;
Query OK, 3 rows affected (0.16 sec)
Records: 3 Duplicates: 0 Warnings: 0
4、检查基本表数据
mysql> select * from test;
+------+------+
| c1 | c2 |
+------+------+
| 1 | 1 |
| 1 | 2 |
| 2 | 2 |
+------+------+
3 rows in set (0.00 sec)
5、ok,数据准确。
个人结论及疑问:
1、采用临时过渡表的方式,目前尚在可以忍受的范围之内。150万条记录的表,除了truncate基本表的速度(29.44秒)超出预计,其他操作均在5秒内,可以看出mysql的速度确实快。当然,测试仅考虑最简单的情况。如果表的字段很多,字段类型复杂,或者表上有索引,这种方式的速度可能会直线下降(猜测而已)。
2、还是老问题,有没有更好的办法?
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/59630/viewspace-806674/ ,如需转载,请注明出处,否则将追究法律责任。