Когда следует создавать индексы в базе данных?

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

Ответ

Индексы ускоряют операции чтения (SELECT, JOIN, ORDER BY, WHERE), но замедляют запись (INSERT, UPDATE, DELETE), так как индексные структуры требуют поддержки.

Создавать индекс стоит, когда:

  • Поле часто используется в условиях WHERE или JOIN.
  • Требуется уникальность значений (первичный или уникальный ключ).
  • Поле имеет высокую селективность (много уникальных значений).
  • Часто выполняются операции ORDER BY или GROUP BY по этому полю.

Избегать индексов стоит, когда:

  • Таблица небольшая (сканирование часто быстрее).
  • Поле имеет низкую селективность (например, status с 2-3 значениями).
  • Таблица подвержена частым и объемным операциям вставки/обновления.

Пример создания и использования:

-- Создание индекса для ускорения поиска по email
CREATE INDEX idx_users_email ON users(email);

-- Запрос, который сможет использовать этот индекс
SELECT name FROM users WHERE email = 'user@example.com';

Важно: Выбор индексов должен основываться на анализе реальных запросов с помощью EXPLAIN (или EXPLAIN ANALYZE).