У меня есть таблица из 3 666 058 записей и 6 столбцов, определенная следующим образом:
CREATE TABLE IF NOT EXISTS `annoyance` (
`a` varchar(50) NOT NULL default '',
`b` varchar(50) NOT NULL default '',
`c` longtext,
`d` varchar(21) NOT NULL,
`e` float default NULL,
`f` smallint(6) NOT NULL default '0',
KEY `ab` (`a`,`b`),
KEY `b` (`b`),
KEY `d` (`d`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Я пытаюсь получить содержимое столбцов a
, b
и d
, когда a
начинается с определенного префикса (длиной 3 буквы), пусть он будет aaa
. Поэтому я запускаю следующий запрос: SELECT a,b,c from annoyance where a like 'aaa%';
. Это должно получить ~ 1 835 000 записей из таблицы.
Моя проблема в том, что этот запрос очень медленный (если, конечно, не кэшируется) и иногда занимает несколько минут.
Итак, как я могу ускорить выполнение этого конкретного запроса? Я попытался, но безуспешно, создать индекс для a
(размер 3 или без указания размера): MySQL даже не потрудился бы использовать индекс, если я не принудительно установил бы его с FORCE INDEX
(подсказки индекса), и он это сделал не похоже, чтобы ускорить выполнение запроса.