mysql scrapy 重复数据_MySQL大数据量表中删除重复记录

MySQL大数据量表中删除重复记录

最近工作中需要抓取大量新闻,抓取的数据中由于一些原因存在一些重复数据,而整个数据表的记录数接近10万条,大小接近1个G,又在我自己的渣渣本本上,查询速度十分不理想,想要完成一个最基本的查询都很困难。在看了一些相关资料后终于找到解决方法,分享给大家参考。

首先说一下新闻表的大概结构,主要是包含id、title、content等字段,其中title字段使用较为频繁,并且需要用该字段判断重复记录,所以我们先给title字段添加索引。添加索引后我们可以使用以下语句来很快地查询出哪些title是重复的:

SELECT `title` FROM `info` GROUP BY `title` HAVING COUNT( `title` ) >1

但如果要一次查出重复字段的id的话就需要用到子查询了,可是子查询的效率很低,明显是不合适的,所以我们可以先建一个临时表:

CREATE TABLE `tmptable` AS (SELECT `title` FROM `info` GROUP BY `title` HAVING COUNT( `title` ) >1);

有了重复字段的标题接下来就可以查出重复字段的id了,我这里为了方便又建了一个临时表:

CREATE TABLE `idtable` AS ( SELECT min(a.`id`) AS id, a.`title` FROM `info` a, `tmptable` t WHERE a.`title` = t.`title` GROUP BY a.`title`);

这样删除重复字段就很容易了:

DELETE a FROM `info` a,`idtable` t WHERE a.`id` = t.`id`;

不过我这篇文章中的方法只适用于记录只重复了一次的情况,不过稍微改改就可以删除重复次数较多的记录.

来源:https://blog.skyx.in/archives/135/

我自己改成这样:

CREATE TABLE `idtable` AS (SELECT `title`,min(id) AS id FROM `info` GROUP BY `title` HAVING COUNT( `title` ) >1)

备注:在删除重复多条的情况下,尽量避免全表搜索,比如!=或者order by等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值