|   |   | 
| 
 | оптимизация отбора динамического списка | ☑ | ||
|---|---|---|---|---|
| 0
    
        Александр056 01.08.17✎ 15:53 | 
        Всем дорого времени суток. Форма списка, на ней заявки - динамический список, примерно 1 500 000 документов. Запрос в динамическом списке произвольный с рядом временных таблиц и соединений - не спрашивайте как так, долгая история со странными требованиями заказчика и почему решили делать именно так неизвестно. По факту сейчас код установления отбора выполняется примерно 40! секунд
 Код: ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТипЗаявки.Родитель"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбора.ПравоеЗначение = ПредопределенноеЗначение("Справочник.ТипыЗаявок.СервисныеЗаявки"); ЭлементОтбора.Использование = Истина; так же пробовал через процедуру: ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список,"ТипЗаявки.Родитель",ПредопределенноеЗначение("Справочник.ТипыЗаявок.СервисныеЗаявки"),ВидСравненияКомпоновкиДанных.Равно,,Истина,РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный,); время выполнения не отличается, разница только в том что через общий модуль, в меню настройка списка на вкладке "Основные" появляется этот отбор и его можно включать отключать галкой. Смотрел замером производительности, ничего там столь длительного не нашел, затрудняюсь куда копать? дабы ускорить время выполнения отбора. | |||
| 1
    
        Fedor-1971 01.08.17✎ 16:00 | 
        (0) Вариант1: наложи условия на выборку (в запросе ДС) всё то же самое, только в Где запроса. Относительный минус, пользователь не сможет снять этот отбор (или придётся предусмотреть программную возможность его снимать - динамически изменять текст запроса).
 Вариант2: ограничь стандартный период (не тащи сразу 100500 документов, а отбери, например, за квартал их там явно меньше) | |||
| 2
    
        Александр056 01.08.17✎ 16:02 | 
        (1) спасибо но за период не устраивает заказчика
 ГДЕ, т.е. программно менять текст запроса? у меня фильтров по кнопке несколько, т.е. каждый раз искатьэту область где и то удалять ее, то правильно заполнять? | |||
| 3
    
        Cyberhawk 01.08.17✎ 16:02 | 
        "Смотрел замером производительности" // Так он время выполнения запросов не показывает. Профайлер СУБД смотри     | |||
| 4
    
        Александр056 01.08.17✎ 16:04 | 
        (3) думал найду что-то в коде, что как подводный камень сильно тормозит.     | |||
| 5
    
        Fedor-1971 01.08.17✎ 16:07 | 
        (2) Да, но можно и проще
 Запомнить исходный текст запроса (т.е. в нём нет ГДЕ) Создать строку для условий Список.ТекстЗапроса=ОригинальныйЗапрос+" ГДЕ "+ СтрокаУсловий Всяко проще чем что-то искать и учитывать разные комбинации | |||
| 6
    
        apokrit 01.08.17✎ 16:13 | 
        (1), (5) Вариант1 - это + / - бессмысленно.
 Отборы компоновки (списка) обычно и добавляются в ГДЕ. Могут еще в параметры виртуальных таблиц добавиться (а вот руками их туда уже совсем неудобно пихать будет). | |||
| 7
    
        Fedor-1971 01.08.17✎ 16:23 | 
        (6) Ну запрос нам не показали, может там есть простор для оптимизации. 
 Если хотим ускорить выбор данных, накладывать условия на выборку лучше не доверять автоматике (программеру проще - это да, но можно получить совсем неочевидную засаду в виде неоптимальности) | |||
| 8
    
        lodger 01.08.17✎ 16:27 | 
        подитог: надо оптимизировать запрос в дин.списке.
 отборы пихать в него же. | |||
| 9
    
        ildary 01.08.17✎ 16:36 | 
        (4) в дин. списке случайно сортировка не особая? Если да, то это добавляет тормозов. Если убрать сортировку и документы пойдут в порядке дат, то работа Д.С. должна ускориться.     | |||
| 10
    
        Александр056 01.08.17✎ 16:46 | 
        попробовал программно засунуть в текст запроса условие, получилось, отработало, долго... суть не поменялась, не замерял время, но по ощущениям результата нет.     | |||
| 11
    
        apokrit 01.08.17✎ 16:54 | 
        (10) В общем-то единственный надежный подход предлагается в (3)
 Т.е. смотреть план выполнения запроса (ов) и уже исходя из этого решать как улучшать ситуацию. | |||
| 12
    
        Александр056 01.08.17✎ 17:08 | 
        (11) чем сейчас и занялся     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |