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


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

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

5 70

5 ответов:

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

У вас нет бесконечной памяти. Сделать так, чтобы все индексы вписывались в RAM = хорошо.

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

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

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

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

индексирование займет больше выделенного пространства как с диска, так и с ОЗУ, но также значительно улучшит производительность. К сожалению, когда он достигает предела памяти, система будет сдавать дисковое пространство и рисковать производительностью. Практически, Вы не должны индексировать любое поле, которое, по вашему мнению, не связано с каким-либо алгоритмом обхода данных, ни вставкой, ни поиском (предложение WHERE). Но вы должны, если иначе. По умолчанию вы должны индексировать все поля. Поля, которые вы следует учитывать unindexing, если запросы используются только модератором, если только они не нуждаются в скорости слишком

Не рекомендуется индексировать все столбцы в таблице. Хотя это сделает таблицу очень быстрой для чтения, она также становится намного медленнее для записи. Запись в таблицу, в которой индексируется каждый столбец, будет включать в себя размещение новой записи в этой таблице, а затем размещение информации каждого столбца в собственной индексной таблице.