Что такое индекс в базе данных?

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

Ответ

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

Принцип работы: Представьте книгу без оглавления: чтобы найти главу, нужно просмотреть все страницы. Индекс — это и есть оглавление, позволяющее СУБД быстро найти адрес нужных данных.

Основные типы индексов:

  • Кластерный индекс (Clustered): Определяет физический порядок хранения строк в таблице. Таблица может иметь только один кластерный индекс (часто это первичный ключ PRIMARY KEY). Данные в таблице отсортированы по значениям этого индекса.
  • Некластерный индекс (Non-clustered): Это отдельная структура, которая хранит ключи индекса и указатели на соответствующие строки в таблице. На одной таблице можно создать множество некластерных индексов.

Пример создания в SQL:

-- Создание некластерного индекса по столбцу Email
CREATE INDEX IX_Users_Email ON Users(Email);

-- Создание уникального некластерного индекса
CREATE UNIQUE INDEX IX_Users_Username ON Users(Username);

-- Составной индекс (по нескольким столбцам)
CREATE INDEX IX_Orders_Status_Created ON Orders(Status, CreatedDate);
Преимущества и недостатки: Преимущества Недостатки
Резкое ускорение операций чтения (SELECT). Замедление операций записи (INSERT, UPDATE, DELETE), так как индексы необходимо перестраивать.
Обеспечение уникальности данных (UNIQUE). Дополнительное потребление дискового пространства.
Ускорение сортировки и группировки. Неправильный выбор индексов может ухудшить производительность.

Правила применения:

  1. Индексируйте столбцы, часто используемые в условиях WHERE, JOIN и ORDER BY.
  2. Для составных индексов важен порядок столбцов. Первым должен идти столбец с наибольшей селективностью.
  3. Избегайте индексации часто изменяемых столбцов или столбцов с малым количеством уникальных значений (низкая селективность).

Видео-ответы