Что такое индексы в SQL и для чего они нужны?

«Что такое индексы в SQL и для чего они нужны?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Индексы в SQL — это специальные структуры данных (чаще всего B-деревья), которые ускоряют операции поиска и извлечения данных из таблиц базы данных. Их можно сравнить с алфавитным указателем в книге.

Для чего нужны (основные цели):

  1. Ускорение SELECT-запросов, особенно с условиями WHERE, ORDER BY, GROUP BY и JOIN.
  2. Обеспечение уникальности данных через уникальные индексы (UNIQUE INDEX).
  3. Ускорение операций сортировки и группировки.

Как работает: Вместо полного сканирования таблицы (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, так как сама структура индекса также требует обновления. Они занимают дополнительное место на диске. Создавать индексы следует обдуманно, на часто используемых в условиях отбора столбцах.