На что обращать внимание при создании индексов в базе данных?

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

Ответ

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

Основные критерии:

  1. Селективность столбца

    • Высокая селективность (уникальные или почти уникальные значения, например, id, email) — лучшие кандидаты для индекса.
    • Низкая селективность (мало уникальных значений, например, gender, status) — индексы часто неэффективны, может помочь частичный индекс.
  2. Паттерны запросов

    • Индексируйте столбцы, которые часто фигурируют в условиях WHERE, JOIN, ORDER BY и GROUP BY.
  3. Композитные (составные) индексы

    • Порядок столбцов критически важен. Первым должен идти наиболее селективный столбец, используемый в условиях равенства (=).
      -- Эффективный индекс: селективный last_name идёт первым
      CREATE INDEX idx_users_name_status ON users(last_name, status);
      -- Менее эффективный индекс
      CREATE INDEX idx_users_status_name ON users(status, last_name);
  4. Влияние на операции записи (DML)

    • Каждый индекс замедляет INSERT, UPDATE, DELETE, так как требует дополнительного обновления структур данных.
  5. Типы данных и размер

    • Избегайте индексации больших типов (TEXT, BLOB). Для длинных строк используйте индексы по префиксу или хэшированные значения.
    • Большие индексы потребляют больше оперативной памяти и дискового пространства.
  6. Мониторинг и обслуживание

    • Регулярно анализируйте использование индексов (например, через pg_stat_user_indexes в PostgreSQL) и удаляйте неиспользуемые.