點擊上方藍色字體,選擇“標星公眾號”
優(yōu)質(zhì)文章,第一時間送達
最近在處理項目組的一個數(shù)據(jù)集,數(shù)據(jù)量每張表在百萬級,由于數(shù)據(jù)量較大在數(shù)據(jù)下載和處理方面都可以說是曠日持久,這篇記錄一下相關(guān)的經(jīng)驗。
數(shù)據(jù)下載
拿到的數(shù)據(jù)是在遠程數(shù)據(jù)庫里面,原先打算直接從遠程庫里下載csv或txt到電腦上,但在mysql上進行這樣的操作好像不是很方便速度也很慢。
目前在使用的方法是將遠程數(shù)據(jù)庫里面的數(shù)據(jù)導(dǎo)出為sql到本地,導(dǎo)入本地數(shù)據(jù)庫后進行操作,但這一過程也很緩慢,一個百萬級數(shù)據(jù)庫在navicat里面可能要導(dǎo)個半個小時,在命令行可能會快一點但沒有嘗試。
MySQL中的去重
基本思路是復(fù)制原表A結(jié)構(gòu)新建一個表B,對表B添加UNIQUE約束,然后將表A中的數(shù)據(jù)逐條插入表B,約束會自動實現(xiàn)去重。
#復(fù)制表結(jié)構(gòu)
CREATE TABLE newTable LIKE oldTable;
#修改表字段,因為httpURL太大
ALTER TABLE newTable MODIFY httpURL VARCHAR(300);
#為表格添加約束條件(在Mysql5中,如果約束字段過大,則報錯,因此要先執(zhí)行上面的修改表字段)
ALTER TABLE newTable ADD UNIQUE(IP,timeStart);
#為新表中添加數(shù)據(jù)(約束條件自動去重)
INSERT IGNORE newTable
SELECT * FROM newTable
ORDER BY IP,timeStart;
測試的表數(shù)據(jù)量在三百萬左右,去重后數(shù)據(jù)在二百萬左右,在navicat實現(xiàn)時間2168.470s,命令行應(yīng)該會更快。
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。
本文鏈接:
https://blog.csdn.net/weixin_26870929/article/details/113187456