Что такое индексы в базах данных и зачем они нужны?

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

Ответ

Индекс в базе данных — это дополнительная структура данных, которая создается на основе одного или нескольких столбцов таблицы для ускорения операций поиска и извлечения данных. Его можно сравнить с алфавитным указателем в книге.

Основная цель: Значительно уменьшить количество данных, которые СУБД должна просканировать для выполнения запроса.

Как создать индекс (SQL):

-- Создание простого индекса по одному столбцу
CREATE INDEX idx_user_email ON users(email);

-- Создание составного индекса по нескольким столбцам
CREATE INDEX idx_user_name_country ON users(last_name, country);

Преимущества индексов:

  • Ускорение операций SELECT: Особенно с условиями WHERE, ORDER BY, GROUP BY.
  • Ускорение JOIN: Индексы по столбцам связи делают объединение таблиц намного быстрее.
  • Обеспечение уникальности: Уникальные индексы (UNIQUE INDEX) гарантируют отсутствие дубликатов в столбце.

Недостатки и затраты:

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

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

  • B-дерево / B+-дерево: Стандартный индекс для большинства операций, включая диапазонные запросы.
  • Хеш-индекс: Сверхбыстрый поиск по точному совпадению (=), но не поддерживает диапазоны и сортировку.
  • Полнотекстовый индекс: Для эффективного поиска по тексту.
  • Bitmap-индекс: Эффективен для столбцов с небольшим количеством уникальных значений (низкая кардинальность).

Правило применения: Индексируйте столбцы, которые часто используются в условиях WHERE, JOIN и ORDER BY. Избегайте индексации часто изменяемых столбцов или таблиц, где операции записи преобладают над чтением.