Производительность индексов в mysql?

Из статьи на хабре:
Уникальность значений в столбце влияет на производительность индекса. В общем случае, чем больше у вас дубликатов в столбце, тем хуже работает индекс. С другой стороны, чем больше уникальных значения, тем выше работоспособность индекса. Когда возможно используйте уникальный индекс.

Когда вы создаете индекс, вы обязаны постараться уменьшить количество дубликатов в ваших ключевых столбцах. Или более точно: стараться держать коэффициент повторяющихся значений настолько низким, насколько это возможно.

Вопрос: если у меня в столбце только 0 или 1, или 1,2,3 т.е. почти все значения это дубликаты, (и этот столбец участвует в условии поиска) имеет ли тогда смысл создавать индекс по таким столбцам?
  • Вопрос задан
  • 259 просмотров
Решения вопроса 1
@nelson
Зависит от распределения значений и запросов.
Например, если у вас 0 и 1 равномерно распределены по строкам, и в запросе вы также ищете как 0 так и 1 - то индекс особо не нужен.
Если же у вас 80% нули, и 20% единицы, а в запросах вы проверяете только на =1, то индекс может повысить производительность такого запроса.

Я бы ориентировался на цифру в 20% - если в столбце есть значения которые встречаются реже чем в 20% строк, и по этим значениям осуществляется поиск, то индекс может его ускорить.

На вашем месте я бы начал с того, что добавил этот индекс и посмотрел план запроса командой EXPLAIN - если индекс лишний, то оптимизатор mysql его не будет использовать (смотрите столбец key в результате explain).

Кстати, при выполнении запроса оптимизатор mysql как правило выбирает только один индекс. Смотрит среди всех столбцов, который есть в условии where или order by и выбирает самый селективный (это если упрощенно, без деталей).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы