Задать вопрос
Driver86
@Driver86
Немодератор toster.ru

Влияет ли размер индекса на скорость MySQL?

Например, надо два индекса:

id1 unique integer
id2 unique char(255)

Скорее всего, при миллиардах записей, id2 char(255) будет слишком велик, что бы полностью уместиться в оперативной памяти, в отличие от id1 integer, и запрос по нему станет медленнее.
Но повлияет ли это на запросы только по полю id1, который должен остаться быстрым?

Я склоняюсь к тому, что, индексы хранятся отдельно и друг на друга не влияют, но хотелось бы уточнить, т.к. в будущем,, когда в базе будет миллиарды записей, alter table, если что, будет большой проблемой.
  • Вопрос задан
  • 372 просмотра
Подписаться 3 Простой 4 комментария
Помогут разобраться в теме Все курсы
  • Академия Eduson
    FullStack-разработчик: тариф PRO
    14 месяцев
    Далее
  • Skillbox
    Python-разработчик
    10 месяцев
    Далее
  • GB (GeekBrains)
    Профессия Python-разработчик
    10 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
Вопрос не в том, как индексы "хранятся", а в том, как используются. Индексы не живут в каком-то своем собственном альтернативном пространстве. А используют ту же самую оперативную память. Следовательно, если использовать в запросе какой-то индекс, то БД будет пытаться разместить его в оперативной памяти. И в итоге всем индексам будет не хватать места.

Если есть опасение, что индекс окажется слишком большим, надо заняться такой вещью, как размышления. И задать себе вопросы:
  • А нужен ли нам избыточный тип CHAR? Почему бы не использовать нормальный VARCHAR?
  • Нужен ли нам индекс по всей длине поля, или можно проиндексировать только начало, а остальное легко найдётся перебором?
  • Если нужен по всей, то не сделать ли дополнительную колонку с MD5 от содержимого поля CHAR, которая будет занимать всего 16 байт, и проиндексировать уже её индекс типа HASH?
Ответ написан
Комментировать
Vamp
@Vamp
Но повлияет ли это на запросы только по полю id1, который должен остаться быстрым?

Напрямую не повлияет.

когда в базе будет миллиарды записей, alter table, если что, будет большой проблемой.

Верное замечание. В худшем случае для альтера потребуется свободного места столько же, сколько занимает вся таблица вместе со своими индексами. Это в дополнении к практически бесконечному времени, требуемому на сам альтер.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы