GROUP BY与INSERT IGNORE


嗨!
我需要扫描mysql(5.1)上的一个非常大的表,
这就是表格看起来像多少有些差别:

 CREATE TABLE `big_table` (
   `id` BIGINT(11) NOT NULL AUTO_INCREMENT,
   `main_id` INT(11) DEFAULT NULL,
   `key` VARCHAR(20) NOT NULL,
   PRIMARY KEY (`id`),
   KEY `main_id_key` (`main_id`,`key`),
 ) ENGINE=INNODB AUTO_INCREMENT=2315678197 DEFAULT CHARSET=utf8

我需要将main_id + keys的所有唯一值存入新表。
使用以下查询需要很长时间(在非常快速的服务器上运行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

INSERT IGNORE相比, GROUP BY main_id, key会执行快许多倍。

SELECT.. GROUP BY main_id, key将通过使用覆盖索引而得到更快执行,并且导致更少数量的记录,而INSERT IGNORE将涉及每个正在插入的行的INDEX KEY查找。

链接地址: http://www.djcxy.com/p/63889.html

上一篇: GROUP BY vs INSERT IGNORE

下一篇: Mysql query : file sort when inner join, limit and order by