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