我有一個表約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