Вопрос проверяет понимание компромисса между быстрым чтением и дорогой записью.
При вставке или обновлении строки база данных должна обновить все связанные индексы, что увеличивает время записи. Чем больше индексов, тем дороже операции INSERT и UPDATE. Также возможны дополнительные операции по балансировке дерева индекса. Это увеличивает нагрузку на диск и CPU.
Индекс ускоряет чтение, но увеличивает стоимость записи, потому что данные нужно поддерживать в согласованном состоянии.
При вставке строки база данных выполняет:
Запись строки в таблицу.
Добавление ключа в каждый индекс.
Возможное перераспределение страниц индекса.
Если индексов много, количество операций растет линейно.
Если изменяется индексируемое поле:
Удаляется старое значение из индекса.
Добавляется новое.
Это фактически две операции.
Удаление также:
Удаляет запись из таблицы.
Удаляет ключи из индексов.
Причины:
Дополнительные записи на диск.
Поддержание структуры B-tree.
Блокировки страниц индекса.
При высокой нагрузке это может стать узким местом.
Обычно:
Не создавать лишние индексы.
Индексировать только часто используемые поля.
Анализировать реальные планы запросов.
Индексы ускоряют чтение, но увеличивают стоимость записи, потому что каждая операция должна обновлять индексные структуры.