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等等。
總結
以上是生活随笔為你收集整理的mysql scrapy 重复数据_MySQL大数据量表中删除重复记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql表中有重复的元组_MySQL查
- 下一篇: mysql查看已打开文件数_MySQL如