Для чего используются индексы в базах данных?

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

Ответ

Индексы в базах данных — это специальные структуры данных (чаще всего B-деревья), которые ускоряют операции поиска и извлечения данных из таблиц, но замедляют операции модификации данных (INSERT, UPDATE, DELETE).

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

Как работает: При создании индекса по столбцу(ам) СУБД создает и поддерживает отсортированную структуру, хранящую значения столбца и указатели на соответствующие строки в таблице.

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

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

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

Когда использовать индексы (столбцы для индексирования):

  • Столбцы, часто используемые в условии WHERE (фильтрация).
  • Столбцы, участвующие в JOIN.
  • Столбцы, используемые в ORDER BY или GROUP BY.
  • Столбцы с ограничениями уникальности (PRIMARY KEY, UNIQUE).

Компромиссы и затраты:

  • Плюсы: Значительное ускорение операций чтения (SELECT).
  • Минусы:
    • Занимают дополнительное дисковое пространство.
    • Замедляют запись данных, так как индекс необходимо обновлять при каждом изменении индексируемых столбцов.
    • Неэффективны для таблиц с частыми пакетными обновлениями или маленького размера.

Лучшие практики: Индексируйте избирательно, основываясь на реальных рабочих нагрузках и частых запросах. Мониторьте и удаляйте неиспользуемые индексы.