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';Связанные термины
Анекдоты по теме
— Что общего у поиска иголки в стоге сена и SELECT без индекса? — И то и другое занимает вечность. Только в базе стог сена — это миллион строк.
Индекс говорит таблице: — Милая, ты знаешь, я тебя ускоряю в 1000 раз! Таблица (тяжело вздыхая): — А я из-за тебя при каждой вставке торможу. Ты меня перестраиваешь. Мы в toxic relationship. Индекс: — Ничего, я кластерный. Без меня ты вообще куча мусора на диске.
— Что такое CLUSTER в PostgreSQL? — Физическая перезапись таблицы по порядку индекса. CLUSTER orders USING orders_created_at_idx; — После этого строки физически упорядочены по created_at. — Зачем? — Range queries по дате работают быстрее — меньше random I/O. — Минус? — Не поддерживается автоматически. Новые строки вставляются в случайном порядке.