Нужен ли индекс из одного столбца при наличии индекса из нескольких столбцов?
Я попал в систему, которая была плохо спроектирована. Сейчас я делаю DBA на их базе данных, и у меня много ситуаций, подобных следующей (псевдокод):
Table t1{
c1;
c2;
c3;
c4;
key(c1);
key(c2);
key(c1,c2);
key(c1,c2,c3);}
Действительно ли нужны индексы из одного столбца, поскольку у меня уже есть многоколонный индекс, содержащий эти столбцы?
Или, с другой стороны, нужен ли многострочный столбец, поскольку у меня уже есть столбцы с одним столбцом?
2 ответа
Небольшая выдержка из страницы документации о том, как MySQL использует индексы:
Если таблица имеет индекс из нескольких столбцов, любой крайний левый префикс индекса может использоваться оптимизатором для поиска строк. Например, если у вас есть трехколонный индекс (
col1
,col2
,col3
), вы проиндексировали возможности поиска на (col1
), (col1
,col2
), а также (col1
,col2
,col3
). Для получения дополнительной информации см. Раздел 8.3.5, "Многостолбцовые индексы".
Вы лучше удалите индексы на (c1)
а также (c1,c2)
, Они не используются, но занимают место для хранения и потребляют мощность процессора, чтобы поддерживать их актуальность при изменении данных таблицы.
Индекс одного столбца на c1
избыточно Индекс из двух столбцов также избыточен с индексом из трех столбцов.
Нужны только два индекса (c2)
а также (c1, c2, c3)
,
MySQL имеет довольно хорошую документацию по составным индексам.