2

これが私のテーブルです

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 ;

161,012,173 レコードと 58.7 GiB のテーブル サイズがあります

同じ構造の新しいテーブルを作成しましtmpたが、使用しているよりも重複したレコードを避けるために一意のキーワードを使用しました:

insert IGNORE into tmp select * from download;

2時間経ちましたが、まだ終わっていません。最速の方法はありますか?

ps。8GB RAMで8core xeonを使用しています

ありがとうございました

4

1 に答える 1

0

最初に無視せずに挿入を試みてから、重複を削除するように変更することができます。

ALTER IGNORE TABLE tmp ADD UNIQUE (`keyword`)

ALTER声明はまだおそらくしばらく時間がかかるでしょう。

編集おっと...「TABLE」キーワードを省略しました。また、よくわかりませんがkeyword、予約されている可能性があるため、バックティックを追加しました。また、InnoDBの一部のバージョンには、これを実行できないバグがあるようです。

また:はい、ALTERステートメントには長い時間がかかる場合がありますが、INSERTIGNOREステートメントでも同じことを行う必要があります。私の答えはもっと速いかもしれない何かの提案ですが、それは保証されていません。

于 2012-11-30T15:01:24.107 に答える