Postgre требует оптимизацию запроса #802596


#0 by MistaEr
Доброго времени, коллеги! Перешел на СУБД Postgre SQL (9.6). в связи с тем что SQL Expres поддерживает только до 10 ГБ объема базы. Есть у меня динамический список, с достаточно сложным запросом, с несколькими соединениями. Оптимизировал уже запрос, сколько мог. Но в одном отборе жестко зависает мой список. Отбор добавлен во вкладке Компановка данных - Условия.                 (ВЫБРАТЬ ПЕРВЫЕ 1                     1
#1 by MistaEr
Отбор устанавливаю в модуле так:
#2 by Черный маклер
как запрос работает без НЕ &ОтборПоПотенциальным ИЛИ ?
#3 by MistaEr
Не проверял если честно. Тестовая среда пока только на MS SQL, там этот запрос летает. Вечером попробую так, когда все выйдут
#4 by MistaEr
Получится:     КОГДА 1 В             (ВЫБРАТЬ ПЕРВЫЕ 1                 1
#5 by MistaEr
А в модуле:
#6 by MistaEr
Основной запрос соединял ЛЕВЫМ с этим регистром седений, так вообще долго работает
#7 by Fragster
Начиная с 8.3.8 можно заменить на пакетный запрос и необязательное левое соединение с временной таблицей с предвыборкой из РС. будет неплохо работать.
#8 by lodger
это нормальное условие? что за таблица "Контрагенты"? вышенабранная ВТ? а где соединение с ней?
#9 by Fragster
в настройках компоновки при этом сделать {ГДЕ ВремТабл.Поле = &Поле} и тогда будет соединение только когда надо
#10 by Fragster
ну и выбираться из СРС также будет только когда надо
#11 by MistaEr
Вот весь запрос:                 (ВЫБРАТЬ ПЕРВЫЕ 1                     1                         (ВЫБРАТЬ ПЕРВЫЕ 1                             1
#12 by MistaEr
Мне нужно получить только одно поле Булево из этого регистра сведений. Что в список, что для отбора
#13 by MistaEr
Вот отсюда я "научился" так писать):
#14 by MistaEr
Хотя, там же написано ниже) Правильнее будет
#15 by тарам пам пам
Срез последних разворачивается во вложенный запрос, и похоже оптимизатор постгри его уже не переваривает. Поэтому можно попробовать включить итоги по срезу последних для регистра СтатусыКонтрагентов + убери дату из параметров вирт таблицы (в регистр же будущие данные вносить не будут?)
#16 by Dmitrii
Не умеет Postgres адекватно работать с таблицами среза последних регистра сведений. Факт признанный самими разработчиками из PostgresPro. Поэтому необходимо (одно из двух): либо заменить срез на первичную таблицу регистра либо делать выбору из таблица среза последних во временную таблицу и делать соединение основной таблицы уже с этой временной. Также возможно подойдёт способ из . Но только если данные берутся из таблицы среза без указаний параметра &Период (актуальные итоги, хранящиеся в физической таблице при условии включения итогов на регистре сведений). Но это надо проверять.
#17 by Вафель
если срез нужен на текущую дату, то разумно включить итоги по регистру
#18 by MistaEr
Итоги срез последних у меня стоит. Но вот дату из параметров не убрал
#19 by MistaEr
этот вариант тоже попробую
#20 by MistaEr
Включены
#21 by Провинциальный 1сник
Попробуй enable_nsetloop=off
#22 by lodger
не люблю вложенные запросы. все равно их неявно выполнит. лучше соединение левое сделай с вирт таблицей (в ней параметры дата и статус наложить), потом анализировать на ЕСТЬ NULL.
#23 by H A D G E H O G s
Это вы круто придумали, дааа
#24 by lodger
лучше убедите своего главного Юзера, что эта инфа в динамике набуй не нужна. достаточно предоставить отчет для мониторинга раз в неделюмесяцпятилетку.
#25 by MistaEr
А как можно исправить?
#26 by MistaEr
Эти параметры нельзя на вирт таблицу накладывать. Про дату написали в а если статус положить он выведет последнюю дату когда был такой статус а не статус на последнюю дату
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С