我有一个表约50M行和格式:MySQL的INSERT INTO ... SELECT ... GROUP BY太慢
CREATE TABLE `big_table` (
`id` BIGINT NOT NULL,
`t1` DATETIME NOT NULL,
`a` BIGINT NOT NULL,
`type` VARCHAR(10) NOT NULL,
`b` BIGINT NOT NULL,
`is_c` BOOLEAN NOT NULL,
PRIMARY KEY (`id`),
INDEX `a_b_index` (a,b)
) ENGINE=InnoDB;
我再定义表t2
,没有索引:
Create table `t2` (
`id` BIGINT NOT NULL,
`a` BIGINT NOT NULL,
`b` BIGINT NOT NULL,
`t1min` DATETIME NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
然后,我使用来自big_table
的查询填充t2
(这将增加大约12M行)。
insert into opportunities
(id, a,b,t1min)
SELECT id,a,b,min(t1)
FROM big_table use index (a_b_index)
where type='SUBMIT' and is_c=1
GROUP BY a,b;
我发现,它需要这个查询大约一分钟处理5000不同(a,b)
在big_table
。
由于在big_table
中有12M个不同的(a,b)
,因此运行 需要大约40个小时,查询全部为big_table
。
什么问题?
如果我只是做SELECT ...
那么查询在大约2秒内做5000行。如果我是SELECT ... INTO OUTFILE ...
,那么对于5000行,查询仍然需要60秒。
EXPLAIN SELECT ...
给出:
id,select_type,table,type,possible_keys,key,key_len,ref,rows,Extra
1,SIMPLE,stdnt_intctn_t,index,NULL,a_b_index,16,NULL,46214255,"Using where"
q1:只选择多长时间? – Sebas 2013-03-04 19:47:24
q2:选择部分的解释计划是什么? – Sebas 2013-03-04 19:48:10
'EXPLAIN SELECT ...'给出 – BvdS 2013-03-04 20:04:29