Ответ
Индексы в базах данных — это специальные структуры данных (чаще всего 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).
- Минусы:
- Занимают дополнительное дисковое пространство.
- Замедляют запись данных, так как индекс необходимо обновлять при каждом изменении индексируемых столбцов.
- Неэффективны для таблиц с частыми пакетными обновлениями или маленького размера.
Лучшие практики: Индексируйте избирательно, основываясь на реальных рабочих нагрузках и частых запросах. Мониторьте и удаляйте неиспользуемые индексы.