ITPub博客

首页 > 数据库 > MySQL > mysql中,删除重复记录的方法及疑问(2)

mysql中,删除重复记录的方法及疑问(2)

原创 MySQL 作者:spaceair 时间:2005-09-17 11:38:36 0 删除 编辑
对包含150万条记录的表,做最简单的测试。[@more@]

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博客 ” ,链接:http://blog.itpub.net/59630/viewspace-806674/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    149
  • 访问量
    4899530