Делают ли составные индексы mysql некоторые другие индексы полностью избыточными? - PullRequest
5 голосов
/ 17 февраля 2011

Если у меня есть составной индекс для (a, b), я понимаю, что запросы, относящиеся только к «a», все равно будут использовать составной индекс (но не запросы, относящиеся к «b»)

Мой вопрос заключается в том, есть ли какая-либо уважительная причина иметь индекс из одного столбца в 'a', если у меня есть индекс (a, b)? То, что я прочитал, показалось расплывчатым относительно того, был ли индекс (a, b) полной заменой или просто индексом «лучше, чем ничего».

Это предполагает, что я делаю фильтрацию по a и a, b. У меня есть таблица со слишком большим количеством индексов, которая ухудшает производительность записи, и я хочу еще раз проверить ее перед удалением индексов, которые, я уверен, не приносят пользы.

Кроме того, этот ответ меняется в зависимости от того, использую ли я InnoDb или MyISAM? Речь идет о MyISAM, но большинство наших таблиц - InnoDb.

Ответы [ 2 ]

4 голосов
/ 17 февраля 2011

Ваш (a, b) индекс также будет обрабатывать запросы, включающие только 'a', и индекс не нужен только для (a).

С документация :

Если в таблице есть несколько столбцов индекс, любой левый префикс индекс может быть использован оптимизатором для найти строки.

Например, если у вас есть трехколонный указатель на (col1, col2, col3), вы проиндексировали поиск возможности на (col1), (col1, col2), и (col1, col2, col3).

2 голосов
/ 17 февраля 2011

Мой вопрос заключается в том, есть ли какая-либо действительная причина иметь индекс из одного столбца в 'a', если у меня есть индекс (a, b)?

Нет, естьнет причины иметь индекс на (а), если у вас есть индекс на (а, б)

...