2012-11-30 19 views
2

這裏是我的表MySQL刪除重複比插入IGNORE更快?

CREATE TABLE IF NOT EXISTS `download` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `date` datetime NOT NULL, 
    `keyword` varchar(255) NOT NULL, 
    `subkeyword` varchar(255) NOT NULL, 
    `desc` varchar(255) NOT NULL, 
    `no_file` varchar(255) NOT NULL, 
    `url` varchar(256) NOT NULL, 
    `visit` int(11) NOT NULL, 
    `stat` tinyint(1) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `keyword` (`keyword`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=161087206 ; 

有161012173個記錄和58.7吉布表大小

我創建新表tmp具有相同的結構,但獨特的關鍵字,以避免重複記錄比我使用:

insert IGNORE into tmp select * from download; 

已經2個小時但尚未完成。 有沒有最快的方法?

ps。 即時通訊使用了8GB RAM 8core至強

謝謝

+0

在什麼文件系統上存儲MySQL的數據文件? – eggyal

+0

/dev/sdb1 ext3 961432072 23746696 888847376 3%/備份 – user1866612

+0

未來是否正在分割選項? – Kermit

回答

0

你可以嘗試做你插入第一,然後不理睬改變刪除重複:

ALTER IGNORE TABLE tmp ADD UNIQUE (`keyword`) 

ALTER聲明將仍然需要一段時間可能。

EDIT糟糕...忽略了「TABLE」關鍵字。另外我不確定,但keyword可能會保留,所以我添加了反引號。此外,InnoDB的某些版本中顯然存在一個不允許你這樣做的錯誤。

另外:是的ALTER語句可能需要很長時間,但插入IGNORE語句應該做同樣的事情。我的回答是一些可能更快的建議,但不能保證。

+0

ALTER IGNORE tmp ADD UNIQUE(關鍵字) #1064 - 您的SQL語法錯誤;檢查與您的MySQL服務器版本對應的手冊,以便在物理尺寸大於服務器內存的大型表的第1行 – user1866612

+0

處的'tmp ADD UNIQUE('keyword')'附近使用正確的語法,ALTER語句可以採用很長時間在生產環境中運行 – user1866612

+0

請參閱我剛剛發佈的編輯 – Cfreak