Как работает индекс в реляционной базе данных?

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

Ответ

Индекс в SQL — это структура данных (чаще всего B-дерево), которая ускоряет операции поиска (WHERE), сортировки (ORDER BY) и соединения (JOIN) за счет предварительно упорядоченных ссылок на строки таблицы. Без индекса СУБД выполняет полное сканирование таблицы (Full Table Scan).

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

  • B-Tree индекс: Стандартный индекс, эффективен для поиска по диапазону и точному совпадению.
  • UNIQUE индекс: Гарантирует уникальность значений в индексируемом столбце.
  • Составной (композитный) индекс: Создается на несколько столбцов. Порядок столбцов критически важен.
  • FULLTEXT индекс: Используется для полнотекстового поиска по текстовым полям.
  • HASH индекс: Эффективен только для поиска по точному совпадению (=).

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

-- Создание индекса
CREATE INDEX idx_user_email ON users(email);

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

-- Запрос, который может использовать индекс
SELECT * FROM users WHERE last_name = 'Иванов' AND department_id = 5;
-- Для этого запроса эффективен составной индекс idx_user_name_dep.

Важные принципы:

  • Запись vs. Чтение: Индексы ускоряют чтение (SELECT), но замедляют запись (INSERT, UPDATE, DELETE), так как индексную структуру тоже нужно обновлять.
  • Кардинальность: Индексирование колонок с высоким количеством уникальных значений (например, email) обычно эффективнее, чем колонок с малым числом уникальных значений (например, gender).
  • Планы выполнения: Всегда анализируйте план выполнения запроса (EXPLAIN / EXPLAIN ANALYZE), чтобы убедиться, что индекс используется.