У меня есть таблица с около 50М строк и формат: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;
Затем я заполняю t2
, используя запрос от big_table
(это добавит около 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
.
Так как существует 12M различных (a,b)
в big_table
, тогда потребуется около 40 часов для запуска запрос по всем big_table
.
Что происходит не так?
Если я просто делаю SELECT ...
, тогда запрос делает 5000 строк примерно за 2 секунды. Если I SELECT ... INTO OUTFILE ...
, тогда запрос по-прежнему занимает 60 секунд для 5000 строк.
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
q2: каков план объяснения выбранной части? – Sebas
'EXPLAIN SELECT ...' дает – BvdS