Partial Index (частичный индекс)
Индекс с условием WHERE — индексирует только часть строк таблицы.
CREATE INDEX idx_name ON table (column) WHERE condition;
Объяснение
Пример
-- Только активные пользователи CREATE INDEX ON users (email) WHERE is_active = true; -- Незакрытые задачи CREATE INDEX ON tasks (assigned_to, due_date) WHERE status != 'done';
Связанные термины
Анекдоты по теме
— Есть ли NULL в индексе? — В PostgreSQL — нет. B-tree индекс по умолчанию не индексирует NULL. — А если WHERE col IS NULL? — Seq Scan. Если нужен индекс на NULL — используй partial index: WHERE col IS NULL.
— Почему UUID медленнее INT как первичный ключ? — UUID случайный — вставки разбросаны по всему индексу. — INT последовательный — всегда в конец. — Насколько медленнее? — На больших таблицах B-tree страницы постоянно разбиваются. В разы медленнее INSERT. — Решение? — UUID v7 (упорядоченный по времени) или ULID — случайные, но монотонные.
— Что такое CLUSTER в PostgreSQL? — Физическая перезапись таблицы по порядку индекса. CLUSTER orders USING orders_created_at_idx; — После этого строки физически упорядочены по created_at. — Зачем? — Range queries по дате работают быстрее — меньше random I/O. — Минус? — Не поддерживается автоматически. Новые строки вставляются в случайном порядке.