У меня есть таблица MySQL MyISAM с примерно 400 миллионами строк данных о ценах (данные 7 ГБ + индекс 9 ГБ) с 3 столбцами:
CREATE TABLE `prices` (
`ts` datetime NOT NULL,
`id` int(10) unsigned NOT NULL,
`price` double NOT NULL,
PRIMARY KEY (`ts`,`instrid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1$$
Количество различных id
(я думаю, что кардинальность - это слово) составляет ~ 500, и для большинства интересующих временных диапазонов внутри этих временных диапазонов кардинальность id
ниже ~ 20 (так что существует только 20 или около того разных идентификаторов между мартом и мартом). 1-й и 2-й).
Запросы почти всегда имеют форму:
select ts, price from prices where ts between {t1} and {t2} and id = {id}.
Кажется, что некоторые индексы должны ускорить процесс.
Будет ли лучше комбинированный индекс для ts
и id
или отдельные индексы для ts
и id
? Какая-то третья альтернатива? Я также был бы признателен за рекомендации, где я мог бы узнать, как ответить на этот вопрос для себя.
Будет ли другой тип таблицы (InnoDB?) более подходящим для моих целей?