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
查找。
上一篇: GROUP BY vs INSERT IGNORE
下一篇: Mysql query : file sort when inner join, limit and order by