|
оптимизация отбора динамического списка | ☑ | ||
---|---|---|---|---|
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) чем сейчас и занялся
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |