やあ!
mysql (5.1) で非常に大きなテーブルをスキャンする必要があります。
これは、テーブルが多かれ少なかれどのように見えるかです。
CREATE TABLE `big_table` ( `id` BIGINT(11) NOT NULL AUTO_INCREMENT, `main_id` INT(11) デフォルト NULL、 `key` VARCHAR(20) NOT NULL, 主キー (`id`)、 KEY `main_id_key` (`main_id`,`key`), ) ENGINE=INNODB AUTO_INCREMENT=2315678197 DEFAULT CHARSET=utf8
main_id + キーのすべての一意の値を新しいテーブルに取得する必要があります。
次のクエリを使用すると、多くの時間がかかります (非常に高速なサーバーで 3 日後も実行されています)。
CREATE TABLE `get_unique` ( `main_id` int(11) NOT NULL, `key` varchar(20) NOT NULL, PRIMARY KEY (`main_id`,`key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT IGNORE INTO get_unique SELECT main_id,key FROM big_table
だから私の質問は -
これはより速くなりますか?
CREATE TABLE `get_unique` ( `main_id` int(11) NOT NULL, `key` varchar(20) NOT NULL, PRIMARY KEY (`main_id`,`key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO get_unique SELECT main_id,key FROM big_table GROUP BY 1,2