Многостолбцовый индекс или несколько индексов для таблицы временных рядов MySQL? - PullRequest
0 голосов
/ 25 февраля 2012

У меня есть таблица 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 (поэтому между 1 и 2 марта существует только около 20 разных идентификаторов).

Запросы почти исключительно имеют форму:

select ts, price from prices where ts between {t1} and {t2} and id = {id}.

Кажется, что некоторые индексы должны ускорить процесс.

Будет ли объединенный индекс на ts и id или отдельные индексы на ts и id лучше?Какой-то третий вариант?Я также был бы признателен за рекомендации, где я мог бы узнать, как ответить на этот вопрос для себя.

Подойдет ли другой тип таблицы (InnoDB?) Для моих целей?

1 Ответ

3 голосов
/ 25 февраля 2012

Я бы пошел на один объединенный индекс по ts, price и id - обычно MySQL выполняет две операции, сначала он находит строку с использованием индекса, а затем извлекает строку из базы данных.Однако, если у вас есть все данные в индексе, он просто получит данные прямо из индекса без извлечения строки из базы данных.Он называется «индексом покрытия».

При выборе базы данных большинство людей рекомендуют InnoDB для серьезного использования, здесь есть хорошее сравнение

...