У меня есть MyISAM таблицы MySQL с около 400 миллионов строк данных цен (7GB данные + индекс 9ГБ) с 3-мя столбцами:Многоколоночный индекс или несколько индексов для таблицы MySQL MySQL.
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 (поэтому между 1 и 2 марта существуют только 20 или более разных идентификаторов).
Запросы почти исключительно в виде:
select ts, price from prices where ts between {t1} and {t2} and id = {id}.
Похоже, что какой-то индекс (ы) должны ускорить процесс.
бы комбинированный индекс ts
и id
или отдельных индексов на ts
и id
быть лучше? Какой-то третий вариант? Я также хотел бы получить рекомендации относительно того, где я мог бы научиться отвечать на этот вопрос для себя.
Будет ли другой тип таблицы (InnoDB?) Более подходящим для моих целей?
Согласованы. Сделайте индекс покрытия столбцами в следующем порядке: '(ts, id, price)'. –
Интересное решение. Я попробую это и взглянем на эту статью. Спасибо :) –
Знаете ли вы, будет ли это проблемой, если этот индекс не поместится в память? –