У меня есть эта таблица:
CREATE TABLE `table1` (
`object` varchar(255) NOT NULL,
`score` decimal(10,3) NOT NULL,
`timestamp` datetime NOT NULL
KEY `ex` (`object`,`score`,`timestamp`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
с 9,1 миллионами строк, и я выполняю следующий запрос:
SELECT `object`, `timestamp`, AVG(score) as avgs
from `table1`
where timestamp >= '2011-12-14'
AND timestamp <= '2011-12-13'
group by `object`
order by `avgs` ASC limit 100;
Даты получены из пользовательского ввода.Запрос занимает 6-10 секунд, в зависимости от диапазона дат.Кажется, время выполнения увеличивается с числом строк
Что я могу сделать, чтобы улучшить это?
Я пытался:
- возиться с индексами (принес запросвремя ожидания от максимального значения 13 с до максимального значения 10 с)
- перемещение хранилища в быстрое SAN (время запроса сократилось примерно на 0,1 с независимо от параметров).
Загрузка процессора и памяти включенасервер не выглядит слишком высоким во время выполнения запроса.