У меня есть таблица с более чем 75 миллионами регистров. Я хочу запустить группу, чтобы суммировать эти реестры.MySQL GROUP BY на больших таблицах
Структура таблицы:
CREATE TABLE `output_medicos_full` (
`name` varchar(100) NOT NULL DEFAULT '',
`term` varchar(50) NOT NULL DEFAULT '',
`hash` varchar(40) NOT NULL DEFAULT '',
`url` varchar(2000) DEFAULT NULL,
PRIMARY KEY (`name`,`term`,`hash`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Я хочу, чтобы выполнить приведенную ниже запрос, но так долго, используя посвящаю сервер MySQL 5.5 с 4 Гб оперативной памяти:
INSERT INTO TABLE report
SELECT
`hash`
,CASE UPPER(SUBSTRING_INDEX(url, ':', 1))
WHEN 'HTTP' THEN 1
WHEN 'HTTPS' THEN 2
WHEN 'FTP' THEN 3
WHEN 'FTPS' THEN 4
ELSE 0 end
,url
FROM output_medicos_full
GROUP BY `hash`;
В отчете таблицы есть уникальный индекс в столбце хеша
Любая помощь в ускорении его?
Thank's
Конечно. Вы используете функции во всех записях. Даже индекс не сделает это быстрее. На других БД-машинах запрос будет терпеть неудачу. Почему бы вам не заполнить столбец URL и какой результат вы ожидаете? –
@juergend Некоторые СУБД (например, Oracle) _do_ имеют функциональные индексы, хотя MySQL может и не иметь этого. –
@ ваше значение хэша - varchar (40), поэтому он будет иметь значительную длину, и это может повлиять на вашу производительность, хотя вы проиндексировали его –