Ответ
Индексы в БД — это специальные структуры данных (чаще всего B-деревья), которые ускоряют операции поиска и сортировки, но замедляют операции вставки, обновления и удаления данных.
Принцип работы: Индекс создаёт отсортированную «карту» для одного или нескольких столбцов. Вместо полного сканирования таблицы (FULL TABLE SCAN) СУБД использует эту карту для быстрого нахождения нужных строк.
Когда создавать индекс (лучшие практики):
- Столбцы, часто используемые в условии
WHERE. - Столбцы, участвующие в операциях
JOIN. - Столбцы, используемые в
ORDER BYилиGROUP BY. - Столбцы с ограничениями уникальности (
PRIMARY KEY,UNIQUE).
Пример создания и использования в SQL:
-- Создание индекса по одному столбцу
CREATE INDEX idx_users_email ON users(email);
-- Создание составного индекса (порядок столбцов важен!)
CREATE INDEX idx_orders_user_date ON orders(user_id, order_date DESC);
-- Запрос, который может использовать индекс
SELECT * FROM users WHERE email = 'user@example.com'; -- Быстро (использует idx_users_email)
SELECT * FROM orders WHERE user_id = 123 ORDER BY order_date DESC; -- Быстро (использует составной индекс)
Компромиссы и недостатки:
- Затраты на хранение: Индексы занимают дополнительное место на диске.
- Затраты на обновление: При каждой
INSERT,UPDATEилиDELETEв таблице должны быть обновлены все связанные индексы, что снижает производительность этих операций. - Неэффективность для некоторых запросов: Индексы бесполезны для столбцов с низкой селективностью (например, столбец
genderсо значениями 'M'/'F').
Правильное проектирование индексов — ключевой фактор производительности баз данных.