PostgreSQL – короткий динамический индекс
В этой статье маленькая памятка как сделать короткий (частичный) динамический (покрывающий плавающее/скользящее окно данных) индекс для большой таблицы. Использование короткого индекса может ускорить запросы. Индекс создается параллельно основному. Коротким он называется потому, что в него попадает ограниченный набор данных (в примере ниже это записи не старше 7 дней).
Пример …
Теперь самое главное– как сделать индекс динамическим, для этого необходимо сделать job, который будет раз в сутки запускать вот такую команду …
REINDEX INDEX CONCURRENTLY your_index;
Готово. Индекс перестраивается достаточно быстро, к тому же его перестроение не блокирует транзакции. Даже если с ним что-то случится – не страшно, основной индекс всегда подстрахует. Все запросы к таблице test будут отдавать предпочтение этому индексу (проверить надо обязательно), если он подходит под условия запроса. Функция обязательно должна быть IMMUTABLE и возвращать тот же тип данных, что и поле, с которым она сравнивается.
Небольшое неудобство состоит в том, что в условии запроса, для сравнения с полем, на которое поставлено ограничение, можно использовать только константу или IMMUTABLE функцию.
Обратите внимание, что короткие индексы не всегда дадут солидный профит, уточняйте эффект в практическом тесте.