Нужен ли индекс из одного столбца при наличии индекса из нескольких столбцов?

Я попал в систему, которая была плохо спроектирована. Сейчас я делаю 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 имеет довольно хорошую документацию по составным индексам.

Другие вопросы по тегам