В каких случаях индексы могут ухудшить производительность базы данных?

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

Ответ

Индексы ухудшают производительность при операциях модификации данных и в случае неоптимального проектирования.

Основные негативные сценарии:

  1. Замедление операций записи (INSERT, UPDATE, DELETE).

    • При каждой модификации строки БД должна обновлять все связанные с ней индексы. Чем больше индексов на таблице, тем дороже операция записи.
  2. Неправильный выбор индекса оптимизатором.

    • При избытке индексов оптимизатор запросов может выбрать не самый эффективный план выполнения, что увеличит время запроса.
  3. Создание бесполезных индексов.

    • Индекс с низкой селективностью (например, на столбец gender со значениями 'M'/'F') почти не фильтрует данные и не ускоряет выборку, но потребляет ресурсы на обновление.
      -- Бесполезный индекс (низкая селективность)
      CREATE INDEX idx_gender ON users(gender);
    • Дублирующие индексы. Индекс (A, B) уже покрывает запросы к столбцу A. Отдельный индекс на A часто избыточен.

Рекомендация: Балансируйте количество индексов, исходя из соотношения операций чтения и записи в вашей нагрузке. Анализируйте реальные медленные запросы перед созданием индекса.