Какой тип индекса БД следует использовать для ускорения поисковых запросов?

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

Ответ

Для ускорения запросов используйте индексы на столбцах, участвующих в условиях WHERE, JOIN, ORDER BY и GROUP BY.

Основные типы индексов и их применение:

  • B-tree (B-дерево): Стандартный индекс. Оптимален для точных совпадений (=), диапазонов (>, <, BETWEEN) и сортировки. Поддерживается почти всеми СУБД.
  • Hash (Хэш): Только для операций точного совпадения (=). Обычно быстрее B-tree для =, но не поддерживает диапазоны и менее гибок.
  • Составной (композитный) индекс: Создается по нескольким столбцам. Порядок столбцов критически важен. Индекс (last_name, date_of_birth) будет работать для поиска по last_name и по паре (last_name, date_of_birth), но не по одному date_of_birth.

Пример создания в SQL:

-- Стандартный B-tree индекс
CREATE INDEX idx_users_email ON users(email);

-- Составной индекс
CREATE INDEX idx_users_name_dob ON users(last_name, date_of_birth);

Важно: Индексы ускоряют чтение (SELECT), но замедляют запись (INSERT, UPDATE, DELETE), так как их необходимо поддерживать в актуальном состоянии. Не индексируйте все подряд — анализируйте частые и медленные запросы.