2012-04-08 213 views
0

我有10個表,每個人有0.5 + M記錄(總計9M記錄)。每個表格中的結構非常相似。現在我想刪除每張表格內和表格之間的重複內容,或者說我想查看所有表格中存在的人員以及我實際擁有的唯一記錄數量。 但問題是數據量巨大。合併表(9M記錄)並刪除重複記錄

因此,我計劃創建不同的表格 - 1個用於電子郵件地址,1個用於移動號碼,1個用於地址等等。但是現在如果每張表都有5M記錄,那麼我的表格變得非常慢。

1解決方案是,我創建的表按照每月的出生日期,將導致12個表,然後我將能夠在每個表內排序數據。

請建議我該怎麼辦?數據是9.6M記錄/ 3.2GB

另外建議如何快速將數據從一個表格移動到另一個表格。

+0

您正在處理的當前模式是什麼? – liquorvicar 2012-04-08 09:00:41

+0

沒有模式,所有表都是不同時間的獨立記錄。每個記錄都有姓名,電子郵件,手機,dob等等。但是一個人可能會更改他的電子郵件,手機號碼不會;並且在某些情況下名稱可能會有點不同 – 2012-04-08 09:10:43

回答

1

創建具有相同的結構,但unique constraint在新表確定行的唯一性的一組列。

然後使用INSERT IGNORE INTO .... SELECT FROM將舊錶中的所有行轉移到新表中。語法可以找到here

然後截斷舊錶並使用INSERT INTO .... SELECT FROM將行傳回原始表。

您可能希望爲原始表添加唯一約束,以防止首先創建重複項。

+0

聽起來不錯,會試試這個。我不需要改變舊錶格。 – 2012-04-08 10:14:13

1

聽起來像你有一個數據庫設計問題。即使是一個3.2GB的數據集也可以快速運行......優化數據庫結構並使用適當的索引,緩存等將比分解到更多的表格要好得多。您希望儘可能少地運行查詢,並儘可能簡單地進行查詢。

如果你確實把它們分解得更多,那麼你會長期在腳下射擊。

1

您可以創建一個從12臺合併結果的具體view,然後在視圖以獲得所需的過濾結果查詢...

+1

第二個!很多很多的IF條件使它完全符合你的需求! – 2012-04-08 10:21:27

+0

@LoganBibby這些IF條件是什麼? – 2012-04-09 10:53:29

+0

那麼,它完全取決於你的模式,以及IF條件是什麼。但是對於每個領域,你都必須從每個表中提取數據。要做到這一點,如果任何方案存在任何差異,則需要使用IF條件。 – 2012-04-10 14:44:18