Вредят ли индексы, если преобладает запись в базу данных

«Вредят ли индексы, если преобладает запись в базу данных» — вопрос из категории Базы данных, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Индексы могут замедлять операции записи (INSERT, UPDATE, DELETE), так как при каждом изменении данных нужно обновлять и сами индексы. Чем больше индексов, тем больше накладных расходов.

Пример:

// Без индекса
_, err := db.Exec("INSERT INTO users (name, email) VALUES (?, ?)", "Alice", "alice@example.com")

// С индексом по email
_, err := db.Exec("INSERT INTO users (name, email) VALUES (?, ?)", "Bob", "bob@example.com") // Будет медленнее

Рекомендации:

  1. Минимизируйте индексы в write-heavy приложениях
  2. Используйте batch-вставки
  3. Рассмотрите отложенное создание индексов
  4. Для аналитических нагрузок иногда лучше делать индексы после загрузки данных

Оптимальный баланс зависит от соотношения read/write операций.