Ответ
Индекс в SQL — это структура данных (чаще всего B-дерево), которая ускоряет операции поиска (WHERE), сортировки (ORDER BY) и соединения (JOIN) за счет предварительно упорядоченных ссылок на строки таблицы. Без индекса СУБД выполняет полное сканирование таблицы (Full Table Scan).
Основные типы индексов:
- B-Tree индекс: Стандартный индекс, эффективен для поиска по диапазону и точному совпадению.
- UNIQUE индекс: Гарантирует уникальность значений в индексируемом столбце.
- Составной (композитный) индекс: Создается на несколько столбцов. Порядок столбцов критически важен.
- FULLTEXT индекс: Используется для полнотекстового поиска по текстовым полям.
- HASH индекс: Эффективен только для поиска по точному совпадению (
=).
Пример создания и использования:
-- Создание индекса
CREATE INDEX idx_user_email ON users(email);
-- Составной индекс
CREATE INDEX idx_user_name_dep ON users(last_name, department_id);
-- Запрос, который может использовать индекс
SELECT * FROM users WHERE last_name = 'Иванов' AND department_id = 5;
-- Для этого запроса эффективен составной индекс idx_user_name_dep.
Важные принципы:
- Запись vs. Чтение: Индексы ускоряют чтение (
SELECT), но замедляют запись (INSERT,UPDATE,DELETE), так как индексную структуру тоже нужно обновлять. - Кардинальность: Индексирование колонок с высоким количеством уникальных значений (например,
email) обычно эффективнее, чем колонок с малым числом уникальных значений (например,gender). - Планы выполнения: Всегда анализируйте план выполнения запроса (
EXPLAIN/EXPLAIN ANALYZE), чтобы убедиться, что индекс используется.