Ответ
Индексы в SQL — это специальные структуры данных (чаще всего B-деревья), которые ускоряют операции поиска и извлечения данных из таблиц базы данных. Их можно сравнить с алфавитным указателем в книге.
Для чего нужны (основные цели):
- Ускорение
SELECT-запросов, особенно с условиямиWHERE,ORDER BY,GROUP BYиJOIN. - Обеспечение уникальности данных через уникальные индексы (
UNIQUE INDEX). - Ускорение операций сортировки и группировки.
Как работает: Вместо полного сканирования таблицы (Full Table Scan), СУБД использует индекс для быстрого нахождения адресов строк, удовлетворяющих условию.
Пример:
-- Создание таблицы
CREATE TABLE users (
id INT PRIMARY KEY,
email VARCHAR(100),
last_name VARCHAR(50),
country VARCHAR(50)
);
-- Создание индекса для ускорения поиска по email
CREATE INDEX idx_users_email ON users(email);
-- Этот запрос будет использовать индекс idx_users_email
SELECT * FROM users WHERE email = 'alice@example.com';
Типы индексов:
- Одно- или многоколоночные (составные).
- Уникальные (
UNIQUE) и неуникальные. - Кластеризованные (Clustered) — определяют физический порядок данных в таблице (обычно PRIMARY KEY).
- Некластеризованные (Non-Clustered) — отдельная структура, хранящая ссылки на данные.
Компромисс (минусы): Индексы замедляют операции INSERT, UPDATE и DELETE, так как сама структура индекса также требует обновления. Они занимают дополнительное место на диске. Создавать индексы следует обдуманно, на часто используемых в условиях отбора столбцах.