Какие индексы следует добавить для ускорения запросов к массивной таблице InnoDB? - PullRequest
0 голосов
/ 29 сентября 2011

Вот мой стол:

CREATE TABLE `letters` (
  `a` bigint(20) unsigned NOT NULL,
  `b` bigint(20) unsigned NOT NULL,
  `c` bigint(20) unsigned NOT NULL,
  `d` bigint(20) unsigned NOT NULL,
  `e` bigint(20) unsigned NOT NULL,
  PRIMARY KEY (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
  • В таблице будет около 1+ миллиардов строк.
  • Каждый столбец может быть запрошен; на каждый столбец можно ссылаться. например.:
    • ВЫБРАТЬ [любой столбец] ИЗ букв, ГДЕ [любой / любой другой столбец] IN ([подзапрос или список]);

Мой вопрос: какие индексы я должен добавить, чтобы ускорить любой запрос в формате выше? (Также, если возможно, пожалуйста, попробуйте описать «почему», его / их следует добавить, чтобы я мог узнать из вашего ответа).

Спасибо!

- Дополнительная информация: вставки будут выполняться довольно регулярно (несколько раз в секунду), но запросы на выборку будут выполняться чаще.

Ответы [ 2 ]

1 голос
/ 29 сентября 2011

Поскольку в предложении WHERE может появиться любой столбец, необходимо добавить индекс для каждого столбца, за исключением поля a , поскольку он уже является ПЕРВИЧНЫМ КЛЮЧОМ и поэтому уже проиндексирован.

ОБНОВЛЕНИЕ : что касается последующего обсуждения, Пудельхат указал, что столбец e имеет низкую селективность индекса, то есть "отношение числа различных значений виндексированный столбец / столбцы к количеству записей в таблице ".По этой причине неясно, поможет ли добавление индекса в столбце e или замедление запросов.Так что Лукас попробует экспериментально и, надеюсь, поделится с нами результатами.

0 голосов
/ 29 сентября 2011

Я думаю, вам нужно иметь уникальный индекс на a (или это должен быть первичный ключ), определенно индексы на b,c,d (на каждом).Нет необходимости в индексе для e (он все равно не будет использоваться, поскольку, как вы говорите, он имеет всего 15 различных значений)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...