оптимизация отбора динамического списка #802307


#0 by Александр056
Всем дорого времени суток. Форма списка, на ней заявки - динамический список, примерно 1 500 000 документов. Запрос в динамическом списке произвольный с рядом временных таблиц и соединений - не спрашивайте как так, долгая история со странными требованиями заказчика и почему решили делать именно так неизвестно. По факту сейчас код установления отбора выполняется примерно 40! секунд Код: так же пробовал через процедуру: ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список,"ТипЗаявки.Родитель",ПредопределенноеЗначение("Справочник.ТипыЗаявок.СервисныеЗаявки"),ВидСравненияКомпоновкиДанных.Равно,,Истина,РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный,); время выполнения не отличается, разница только в том что через общий модуль, в меню настройка списка на вкладке "Основные" появляется этот отбор и его можно включать отключать галкой. Смотрел замером производительности, ничего там столь длительного не нашел, затрудняюсь куда копать? дабы ускорить время выполнения отбора.
#1 by Fedor-1971
Вариант1: наложи условия на выборку (в запросе ДС) всё то же самое, только в Где запроса. Относительный минус, пользователь не сможет снять этот отбор (или придётся предусмотреть программную возможность его снимать - динамически изменять текст запроса). Вариант2: ограничь стандартный период (не тащи сразу 100500 документов, а отбери, например, за квартал их там явно меньше)
#2 by Александр056
спасибо но за период не устраивает заказчика ГДЕ, т.е. программно менять текст запроса? у меня фильтров по кнопке несколько, т.е. каждый раз искатьэту область где и то удалять ее, то правильно заполнять?
#3 by Cyberhawk
"Смотрел замером производительности" // Так он время выполнения запросов не показывает. Профайлер СУБД смотри
#4 by Александр056
думал найду что-то в коде, что как подводный камень сильно тормозит.
#5 by Fedor-1971
Да, но можно и проще Запомнить исходный текст запроса (т.е. в нём нет ГДЕ) Создать строку для условий Список.ТекстЗапроса=ОригинальныйЗапрос+" ГДЕ "+ СтрокаУсловий Всяко проще чем что-то искать и учитывать разные комбинации
#6 by apokrit
, Вариант1 - это + / - бессмысленно. Отборы компоновки (списка) обычно и добавляются в ГДЕ. Могут еще в параметры виртуальных таблиц добавиться (а вот руками их туда уже совсем неудобно пихать будет).
#7 by Fedor-1971
Ну запрос нам не показали, может там есть простор для оптимизации. Если хотим ускорить выбор данных, накладывать условия на выборку лучше не доверять автоматике (программеру проще - это да, но можно получить совсем неочевидную засаду в виде неоптимальности)
#8 by lodger
подитог: надо оптимизировать запрос в дин.списке. отборы пихать в него же.
#9 by ildary
в дин. списке случайно сортировка не особая? Если да, то это добавляет тормозов. Если убрать сортировку и документы пойдут в порядке дат, то работа Д.С. должна ускориться.
#10 by Александр056
попробовал программно засунуть в текст запроса условие, получилось, отработало, долго... суть не поменялась, не замерял время, но по ощущениям результата нет.
#11 by apokrit
В общем-то единственный надежный подход предлагается в Т.е. смотреть план выполнения запроса (ов) и уже исходя из этого решать как улучшать ситуацию.
#12 by Александр056
чем сейчас и занялся
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

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