MySQL - почему бы не индексировать каждое поле?

Недавно я узнал чудо индексов, и производительность значительно улучшилась. Однако со всем, что я узнал, я не могу найти ответ на этот вопрос.

Индексы отличные, но почему кто-то просто не индексировал все поля, чтобы сделать таблицу невероятно быстрой? Я уверен, что есть веская причина не делать этого, но как насчет трех полей в таблице из тридцати полей? 10 в поле 30? Где следует рисовать линию и почему?

Ответ 1

Индексы занимают место в памяти (ОЗУ); Слишком много или слишком больших индексов, и БД придется обменивать их на диск и с него. Они также увеличивают время вставки и удаления (каждый индекс должен быть обновлен для каждой части данных, вставленной/удаленной/обновленной).

У вас нет бесконечной памяти. Таким образом, все индексы соответствуют ОЗУ = хорошо.

У вас нет бесконечного времени. Индексирование только индексов, которые вам нужно проиндексировать, минимизирует удар производительности вставки/удаления/обновления.

Ответ 2

Имейте в виду, что каждый индекс должен обновляться каждый раз, когда строка обновляется, вставляется или удаляется. Таким образом, чем больше индексов у вас есть, тем медленнее производительность для операций записи.

Кроме того, каждый индекс занимает дополнительное место на диске и пространство памяти (при вызове), поэтому он может также замедлить операции чтения (для больших таблиц). Проверьте это

Ответ 3

Вы должны сбалансировать потребности CRUD. Запись в таблицы становится медленной. Что касается того, где рисовать линию, это зависит от того, как данные обрабатываются (сортировка фильтрации и т.д.).

Ответ 4

Индексирование займет больше выделенного места как с диска, так и с помощью ram, но также значительно улучшит производительность. К сожалению, когда он достигнет предела памяти, система будет сдавать пространство на диске и подвергать риску производительность. Практически вы не должны индексировать любое поле, которое, по вашему мнению, не связано ни с каким алгоритмом перемещения данных, ни с вложением, ни с поиском (предложение WHERE). Но вы должны, если в противном случае. По умолчанию вам нужно индексировать все поля. Поля, которые вы должны рассматривать без разницы, - это если запросы используются только модератором, если только они не нуждаются в скорости тоже