Частичные индексы в БД?

Middle+
268 просмотров
AFK Offer AI

Частичные (partial) индексы индексируют только подмножество строк таблицы, определённое условием WHERE.

-- Индекс только для необработанных заказов
CREATE INDEX idx_pending ON orders(created_at)
WHERE status = 'pending';

-- Индекс только для ненулевых email CREATE INDEX idx_email ON users(email) WHERE email IS NOT NULL;

Когда полезны:

  • Данные сильно скошены (10% активных, 90% архивных)
  • Запросы всегда фильтруют по определённому условию
  • Хочется уменьшить размер индекса и ускорить запись
PostgreSQL поддерживает partial indexes полноценно. Планировщик использует их только когда WHERE запроса включает условие индекса. Поддерживаются с PostgreSQL 7.2.

Следующий вопрос

Что такое aggregate в DDD?