Как создать индекс (index) в базе данных SQL?

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

Ответ

Индекс в SQL — это структура данных, которая ускоряет операции поиска и сортировки в таблице за счет дополнительных затрат на дисковое пространство и время записи. Создается командой CREATE INDEX.

Базовый синтаксис создания индекса:

CREATE INDEX index_name ON table_name (column1, column2, ...);

Примеры:

1. Простой индекс на одну колонку:

-- Ускорит поиск и фильтрацию по Email
CREATE INDEX idx_customers_email ON Customers (Email);

2. Уникальный индекс (гарантирует уникальность значений):

CREATE UNIQUE INDEX idx_users_username ON Users (Username);

3. Составной индекс (на несколько колонок):

-- Эффективен для запросов, фильтрующих по обоим полям или только по DepartmentID.
CREATE INDEX idx_employees_dept_salary ON Employees (DepartmentID, Salary);

4. Индекс с указанием порядка сортировки (ASC/DESC):

-- Полезно для запросов с ORDER BY Salary DESC
CREATE INDEX idx_employees_salary_desc ON Employees (Salary DESC);

Когда создавать индексы:

  • На столбцы, часто используемые в условиях WHERE.
  • На столбцы, участвующие в JOIN.
  • На столбцы, используемые в ORDER BY и GROUP BY.

Рекомендации и предостережения:

  • Не индексируйте все подряд: Каждый индекс замедляет операции INSERT, UPDATE, DELETE, так как его тоже нужно обновлять.
  • Мониторьте и анализируйте: Используйте EXPLAIN (или EXPLAIN ANALYZE в PostgreSQL) перед сложными запросами, чтобы понять, используются ли индексы.
  • Рассмотрите индексы по выражениям или фильтрованные индексы (в поддерживаемых СУБД) для сложных сценариев:
    -- PostgreSQL: индекс только для активных заказов
    CREATE INDEX idx_orders_active ON Orders (OrderDate) WHERE Status = 'Active';
  • Кластеризованные vs. Некластеризованные: В SQL Server и других СУБД различают типы индексов. Кластеризованный индекс определяет физический порядок данных в таблице (таблица может иметь только один такой индекс).