[] 千萬級的表如何去重複

來源:互聯網
上載者:User
[求助] 千萬級的表怎麼去重複?
一直都是在折騰萬層級的小小資料庫,不知道索引、資料類型等的不同會對效率有多大影響。最近不是密碼 泄露嗎?就下了個,匯入mysql資料庫,共兩千多萬條記錄,只留密碼欄位,其他欄位全部刪除,進行select、insert等測試,有了索引select的效率明顯不同,但在去重複時遇到難題。

方法一:
CREATE TABLE newtable SELECT DISTINCT pwd FROM oldtable
這種方式看起來效率最高,但運行時直接把機器拖死,記憶體一會兒就用完了。

方法二:
逐條擷取再重複資料刪除(每次提取$num條記錄,我的$num=50)
$result = mysql_query("SELECT MIN(id), pwd FROM tablename WHERE id BETWEEN $id AND $num GROUP BY pwd");
while($row = mysql_fetch_row($result)){
mysql_query("DELETE FROM tablename WHERE id>$row[0] AND pwd='$row[1]'");
}
$id += $num;
再通過地址欄或cookie等傳遞$id,效率太低,處理了100分鐘,才刪除了30多萬條重複

請問我應該怎麼做,效率才會更高?謝謝

------解決方案--------------------
建立暫存資料表方法好
之前一般建議別人這樣操作,但不一定能聽進去,小資料量倒無所謂
http://topic.csdn.net/u/20111225/22/7cabedc3-5e9e-42b3-b05b-153ba5a5a67f.html


操作時候佔資源是必須的,,不可避免。。。。。除非你樂意慢慢等待
------解決方案--------------------
2100w,不知道加unique效率如何,你可試下

SQL code
alter ignore table mypwd add unique(pwd);alter table mypwd drop index pwd;
------解決方案--------------------
用暫存資料表吧。create temporary table ....
------解決方案--------------------
試試:

建立表,設定唯一欄位。
匯出sql檔案。
重新source匯入.
------解決方案--------------------
你可以建唯一鍵。不要索引。 重複直接報錯忽略。

select記憶體不夠進,仍要存檔。 而且有distinct. 還要對比重複。 應沒有source快。
------解決方案--------------------
探討

引用:

你可以建唯一鍵。不要索引。 重複直接報錯忽略。

select記憶體不夠進,仍要存檔。 而且有distinct. 還要對比重複。 應沒有source快。

請看我在7樓的回複,如果不給pwd欄位建索引,7樓的效率就非常高了,110秒處理完。是在SQLyog中實現的
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.