Gymterview
junior

Как создать индекс?

Индекс создаётся с помощью оператора CREATE INDEX или неявно — при определении ограничений PRIMARY KEY и UNIQUE в операторе CREATE TABLE.

Пример
-- Явное создание индекса
CREATE INDEX idx_employees_name ON employees(name);

-- Уникальный индекс
CREATE UNIQUE INDEX idx_users_email ON users(email);

-- Составной индекс (порядок столбцов важен)
CREATE INDEX idx_orders_user_date ON orders(user_id, created_at);

-- Неявное создание через ограничение
CREATE TABLE users (
    id SERIAL PRIMARY KEY,           -- автоматически создаёт уникальный индекс
    email VARCHAR(255) UNIQUE,       -- автоматически создаёт уникальный индекс
    name VARCHAR(100)
);

При создании индекса на таблице с данными операция может заблокировать запись. В PostgreSQL для создания индекса без блокировки используется CREATE INDEX CONCURRENTLY, который строит индекс в фоновом режиме, позволяя продолжать операции записи.

Пример
-- Создание индекса без блокировки таблицы (PostgreSQL)
CREATE INDEX CONCURRENTLY idx_orders_status ON orders(status);

На собеседовании: упомяните оба способа создания (явный и через ограничения) и CONCURRENTLY для production. Частая ошибка — не знать, что CREATE INDEX блокирует запись в таблицу.