MySQL去除重复数据
2018-06-22 00:50:04来源:未知 阅读 ()
今天遇到一个需要对表进行去重的问题,数据量大概千万左右,第一选择就是按Oracle的思路上:
delete from table t1 where id < (select max(id) from table t2 where t1.c1=t2.c1); --将c1值相同的记录进行去重,只留下id最大的,写成id>min(id)效果相同。
以上相关子查询的SQL在c1上存在索引时效率不算低,但是很遗憾MySQL没有这种写法,类似的替代写法在MySQL中效率也低的令人发指,如中间表等手段。
正好在前些时间整理一些shell脚本时处理过mysql导入时出错继续执行的问题,因此测试后采用了如下办法:
1.将表数据导出:
mysqldump -uroot -p --skip-extended-insert -t DBNAME TABLE>TABLE.sql
然后记一下去重后的记录数: select count(*) from (select 1 from TABLE group by c1) a;
2.truncate表,然后创建唯一索引
truncate table TABLE; create unique index IX_c1 on TABLE(c1);
3.最后导入数据,需要添加-f选项。
mysql -uroot -p -f DBNAME<TABLE.sql
-f的作用是:Continue even if an SQL error occurs.
这样导入时会报很多的错误,就是因为唯一约束的存在,你只需要最后检查下表的记录数时候与第一步中查到的数目一致就可以了。
这种去重方式效率比较高,缺陷可能是出错时屏幕上一堆的‘Duplicate entry’报错会淹没其他的报错。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:mysql 中的存储过程
- MySQL replace函数怎么替换字符串语句 2020-03-09
- PHP访问MySQL查询超时怎么办 2020-03-09
- mysql登录时闪退 2020-02-27
- MySQL出现1067错误号 2020-02-27
- mysql7.x如何单独安装mysql 2020-02-27
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash