ИндексыСредний
INDEX (индекс)
Структура данных, ускоряющая поиск строк по значению колонки.
Синтаксис
CREATE INDEX [CONCURRENTLY] idx_name ON table (column); CREATE INDEX ON table (col1, col2); -- составной
Объяснение
Индекс — как оглавление книги: позволяет найти нужные строки без полного сканирования таблицы.
По умолчанию PostgreSQL создаёт B-tree индексы. Каждый индекс:
- Ускоряет SELECT с условием по этой колонке
- Замедляет INSERT, UPDATE, DELETE (индекс нужно обновить)
- Занимает дополнительное место на диске
Пример
-- Простой индекс CREATE INDEX ON users (email); -- Составной (порядок важен!) CREATE INDEX ON orders (user_id, created_at DESC); -- Частичный — только активные CREATE INDEX ON users (email) WHERE is_active = true;
Связанные термины
B-tree индексТип индекса по умолчанию в PostgreSQL. Подходит для операций =, <, >, BETWEEN, LIKE 'prefix%'.EXPLAIN / EXPLAIN ANALYZEEXPLAIN показывает план выполнения запроса. EXPLAIN ANALYZE выполняет запрос и показывает реальное время.Partial Index (частичный индекс)Индекс с условием WHERE — индексирует только часть строк таблицы.Составной индексИндекс по нескольким колонкам. Порядок колонок критически важен.
Анекдоты по теме
— Как понять, что ты начинающий? — Ты ставишь LIMIT 10, а база всё равно думает минуту. Опытный ставит правильный индекс и не ждёт.
— Зачем вы добавили индекс на каждую колонку? — Чтобы всё было быстро! — SELECT стал быстрее на 10%. — Отлично! — INSERT теперь занимает 30 секунд. — ...
— B-tree, Hash, GIN, GiST, BRIN — как выбрать? — B-tree: всё что угодно, сравнения <, >, =. По умолчанию. — Hash: только = (редко нужен). — GIN: массивы, JSONB, full-text. — GiST: геометрия, диапазоны. — BRIN: огромные таблицы с физически упорядоченными данными (даты логов).