MySQL 的一次百万级数据快速去重经验分享

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

「数据下载」

拿到的数据是在远程数据库里面,原先打算直接从远程库里下载 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,命令行应该会更快。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值