⏱️ Один типовой запрос 1С выполнялся больше 8 секунд. PostgreSQL читал свыше 5 млн строк, строил агрегаты — и только потом соединял результат с уже отфильтрованными данными.
Ручной эксперимент показал решение: если перенести условие соединения внутрь подзапроса, планировщик выбирает индексное сканирование и Nested Loop. Время выполнения сокращается до 370 мс. Но переписать запрос нельзя — его генерирует платформа 1С.
Поэтому мы доработали планировщик Postgres Pro Enterprise. Механизм Join Predicate Pushdown переносит условия соединения в подзапросы с агрегацией и отсекает лишние данные до ресурсоемких операций. Исходный запрос менять не пришлось, а ускорение составило 22 раза.
🔗 Читайте подробности в статье. Разобрали планы выполнения, логику оптимизации и другие примеры с GROUP BY, UNION ALL и LIMIT.
🔔 Читайте нас в MAX
Ручной эксперимент показал решение: если перенести условие соединения внутрь подзапроса, планировщик выбирает индексное сканирование и Nested Loop. Время выполнения сокращается до 370 мс. Но переписать запрос нельзя — его генерирует платформа 1С.
Поэтому мы доработали планировщик Postgres Pro Enterprise. Механизм Join Predicate Pushdown переносит условия соединения в подзапросы с агрегацией и отсекает лишние данные до ресурсоемких операций. Исходный запрос менять не пришлось, а ускорение составило 22 раза.
🔗 Читайте подробности в статье. Разобрали планы выполнения, логику оптимизации и другие примеры с GROUP BY, UNION ALL и LIMIT.
🔔 Читайте нас в MAX