2012-06-06 54 views
0

我有一張包含2800萬條記錄的表,但現在它擁有5600萬條記錄,因爲我認爲load local infile命令會忽略表中已存在的行。不,我需要一種方法來有效地刪除重複的行。解決這個問題的最好方法是什麼?高效地刪除重複的行

如果我不想摸我的表我能不能用這個語句select唯一的行:

select distinct (l1.lat, l2.lon) from A, B; 
+3

清空表格並重新加載數據? – Crontab

+0

重複的行也有相同的唯一鍵嗎? –

+0

如果我清空表格,那麼我的ib1文件將呈指數級增長,我無權刪除它。重複的鍵具有相同的唯一鍵。 –

回答

4

選擇原件到一個新的/臨時表,刪除56萬條記錄,插入您的原稿。

例子: INSERT INTO new_fresh_table 選擇A,B,C,d FROM table_with_dupes GROUP BY A,B,C,d

如果你已經失去了某種方式欺騙了你的ID(不知道如何可能與PK),你需要在每一列上使用GROUP BY。寫一個SELECT反對元數據爲你寫SELECT

+0

「不確定這是可能的與一個PK「 - 我同意,並跟進:如果有人可以找出一種方法來做某些事*做出絕對沒有意義*,他們會做到這一點。 – BryanH

0

您沒有指定如何記錄被欺騙。它是主鍵嗎?名稱?什麼?

從O'Reily的SQL Cookbook(強烈推薦,甚至是SQL的優點):

delete from dupes 
    where id not in (select min(id) from dupes group by name) 
+1

雖然這聽起來像@cool_cs有重複的id。 – bluevector

+0

一切id被騙了。我有相同的行; –

+0

你的表是否有主鍵?使用它來代替'id'。如果否,那麼johnnyGold的答案是最好的,當你重新創建你的表格時,確保你設置了一個主鍵並強制它是唯一的。 – BryanH

0

如果你不能碰桌子上,並有能力使用它,你爲什麼不創建一個視圖只顯示你有不同的記錄?

+0

你是怎麼做到的? –

+0

創建視圖MyView作爲從MyTable中選擇不同的col1,col2,col3,...;然後執行此操作:從MyView中選擇*; – Farhan