Как индекс в базе данных ускоряет поиск по полю?

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

Ответ

Индекс ускоряет поиск, создавая отдельную, оптимизированную для поиска структуру данных (например, B-дерево), которая хранит отсортированные значения поля и указатели на соответствующие строки в таблице. Это позволяет СУБД находить данные, не выполняя полное сканирование таблицы (full table scan).

Принцип работы:

  1. При создании индекса СУБД строит упорядоченную структуру по значениям указанного поля.
  2. При выполнении запроса с условием WHERE по этому полю оптимизатор использует индекс для быстрого поиска нужных значений с логарифмической сложностью O(log n).

Пример SQL:

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

-- Поиск, который будет использовать индекс
SELECT * FROM users WHERE email = 'user@example.com';

Преимущества:

  • Высокая скорость поиска: O(log n) вместо O(n) при полном сканировании.
  • Поддержка уникальности: Ограничение UNIQUE реализуется через индекс.
  • Ускорение сортировки и соединений: Индекс может предоставлять уже отсортированные данные.

Недостатки (накладные расходы):

  • Дополнительное дисковое пространство: Индекс — это отдельная структура данных.
  • Замедление операций записи: При INSERT, UPDATE, DELETE СУБД необходимо обновлять и сам индекс, что добавляет работу.