mysql百万级数据快速去重

java1234

共 919字,需浏览 2分钟

 ·

2021-06-03 22:35

点击上方蓝色字体,选择“标星公众号”

优质文章,第一时间送达

最近在处理项目组的一个数据集,数据量每张表在百万级,由于数据量较大在数据下载和处理方面都可以说是旷日持久,这篇记录一下相关的经验。

数据下载

拿到的数据是在远程数据库里面,原先打算直接从远程库里下载csv或txt到电脑上,但在mysql上进行这样的操作好像不是很方便速度也很慢。

目前在使用的方法是将远程数据库里面的数据导出为sql到本地,导入本地数据库后进行操作,但这一过程也很缓慢,一个百万级数据库在navicat里面可能要导个半个小时,在命令行可能会快一点但没有尝试。

MySQL中的去重

基本思路是复制原表A结构新建一个表B,对表B添加UNIQUE约束,然后将表A中的数据逐条插入表B,约束会自动实现去重。

#复制表结构

CREATE TABLE newTable LIKE oldTable;

#修改表字段,因为httpURL太大

ALTER TABLE newTable MODIFY httpURL VARCHAR(300);

#为表格添加约束条件(在Mysql5中,如果约束字段过大,则报错,因此要先执行上面的修改表字段)

ALTER TABLE newTable ADD UNIQUE(IP,timeStart);

#为新表中添加数据(约束条件自动去重)

INSERT IGNORE newTable

SELECT * FROM newTable

ORDER BY IP,timeStart;

测试的表数据量在三百万左右,去重后数据在二百万左右,在navicat实现时间2168.470s,命令行应该会更快。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:

https://blog.csdn.net/weixin_26870929/article/details/113187456

浏览 41
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报