Какие данные можно индексировать в базах данных?

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

Ответ

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

Основные кандидаты на индексы:

  • Ключевые поля: Первичные ключи (PK) и внешние ключи (FK) индексируются автоматически в большинстве СУБД.
  • Поля в условиях WHERE: Часто используемые для фильтрации.
    -- Если частый запрос: SELECT * FROM orders WHERE user_id = ? AND status = 'shipped';
    CREATE INDEX idx_orders_user_status ON orders(user_id, status);
  • Поля в ORDER BY и GROUP BY.
  • Поля в условиях JOIN.

Составные (композитные) индексы особенно эффективны. Порядок столбцов в индексе критичен. Использую правило «равенство-диапазон-сортировка» (Equality, Range, Ordering).

Что обычно НЕ индексирую:

  • Столбцы с низкой кардинальностью (например, gender, boolean флаги), если только они не часть составного индекса.
  • Часто обновляемые столбцы (каждое обновление требует перестройки индекса).
  • Большие текстовые поля (TEXT, BLOB). Для полнотекстового поиска использую специализированные индексы (GIN в PostgreSQL).

Перед созданием индекса всегда анализирую план запроса с помощью EXPLAIN ANALYZE.