MySQL - почему бы не индексировать каждое поле?
Недавно я узнал чудо индексов, и производительность значительно улучшилась. Однако со всем, что я узнал, я не могу найти ответ на этот вопрос.
Индексы отличные, но почему кто-то просто не индексировал все поля, чтобы сделать таблицу невероятно быстрой? Я уверен, что есть веская причина не делать этого, но как насчет трех полей в таблице из тридцати полей? 10 в поле 30? Где следует рисовать линию и почему?
Ответы
Ответ 1
Индексы занимают место в памяти (ОЗУ); Слишком много или слишком больших индексов, и БД придется обменивать их на диск и с него. Они также увеличивают время вставки и удаления (каждый индекс должен быть обновлен для каждой части данных, вставленной/удаленной/обновленной).
У вас нет бесконечной памяти. Таким образом, все индексы соответствуют ОЗУ = хорошо.
У вас нет бесконечного времени. Индексирование только индексов, которые вам нужно проиндексировать, минимизирует удар производительности вставки/удаления/обновления.
Ответ 2
Имейте в виду, что каждый индекс должен обновляться каждый раз, когда строка обновляется, вставляется или удаляется. Таким образом, чем больше индексов у вас есть, тем медленнее производительность для операций записи.
Кроме того, каждый индекс занимает дополнительное место на диске и пространство памяти (при вызове), поэтому он может также замедлить операции чтения (для больших таблиц).
Проверьте это
Ответ 3
Вы должны сбалансировать потребности CRUD. Запись в таблицы становится медленной. Что касается того, где рисовать линию, это зависит от того, как данные обрабатываются (сортировка фильтрации и т.д.).
Ответ 4
Индексирование займет больше выделенного места как с диска, так и с помощью ram, но также значительно улучшит производительность. К сожалению, когда он достигнет предела памяти, система будет сдавать пространство на диске и подвергать риску производительность. Практически вы не должны индексировать любое поле, которое, по вашему мнению, не связано ни с каким алгоритмом перемещения данных, ни с вложением, ни с поиском (предложение WHERE). Но вы должны, если в противном случае. По умолчанию вам нужно индексировать все поля. Поля, которые вы должны рассматривать без разницы, - это если запросы используются только модератором, если только они не нуждаются в скорости тоже