Скорость выполнения запроса после правок
Здравствуйте, возникла необходимость добавить в запрос получение дополнительных данных. Все реализовано, данные собираются и используются. Но на рабочей базе время выполнения запроса выросло с 0,7-1 сек до 4,5-5 сек. Подскажите, можно ли как то оптимизировать доработанный запрос. Пока только попытался избавится в запросах от ". ." но изменений по времени выполнения нет или очень незначительные. Во вложении запрос после изменений
Прикрепленные файлы:
Запрос_после.txt
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Продублирую код, буду признателен любым рекомендациям.
Итоговый запрос:
Исходный:
Итоговый запрос:
ВЫБРАТЬ
ДопДокументы.Документ1 КАК Документ1,
КОЛИЧЕСТВО(ДопДокументы.Документ2) КАК КоличествоДополнительных
ПОМЕСТИТЬ ВТДопДокументы
ИЗ
РегистрСведений.ДопДокументы КАК ДопДокументы
ГДЕ
ДопДокументы.Документ1.Ответственный В (&Ответственный)
И ДопДокументы.Документ2.Состояние.Закрыт = ЛОЖЬ
И (ДопДокументы.Документ2.Тип.Код <> ""000000017""
ИЛИ ТИПЗНАЧЕНИЯ(ДопДокументы.Документ2) <> ТИП(Документ.Требование))
СГРУППИРОВАТЬ ПО
ДопДокументы.Документ1
;
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
Выписка.Номер,
КОЛИЧЕСТВО(ДопДокументы.Документ2) КАК ДопВсего,
ЕСТЬNULL(ВТДопДокументы.КоличествоДополнительных,0) КАК ДопНезавершенные,
Выписка.ДатаПоследнегоИзменения,
Выписка.КонтактноеЛицо,
Выписка.Услуга,
ВЫРАЗИТЬ(Выписка.Описание КАК СТРОКА(1024)) КАК Описание,
ВЫРАЗИТЬ(Выписка.Замечания КАК СТРОКА(1024)) КАК Замечания,
Выписка.Ответственный,
Выписка.Состояние,
Выписка.Дата,
ПараметрыВыписки.ДатаИсполнения,
ИсторияОткрытия.Период КАК ДатаПоследнегоОткрытия,
ИсторияОткрытия.Пользователь КАК Пользователь,
ВремяОбработкиДокумента.ПроцентОтНормы КАК ПроцентОтНормы,
СвойстваДокументов.Значение КАК Срочно
ИЗ
Документ.Выписка КАК Выписка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПараметрыВыписки КАК ПараметрыВыписки
ПО Выписка.Ссылка = ПараметрыВыписки.Документ
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияОткрытия КАК ИсторияОткрытия
ПО Выписка.Ссылка = ИсторияОткрытия.Документ
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СвойстваДокументов КАК СвойстваДокументов
ПО Выписка.Ссылка = СвойстваДокументов.Документ
И (СвойстваДокументов.Свойство.Код = ""00199"")
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВремяОбработкиДокумента КАК ВремяОбработкиДокумента
ПО Выписка.Ссылка = ВремяОбработкиДокумента.Документ
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДопДокументы КАК ДопДокументы
ПО Выписка.Ссылка = ДопДокументы.Документ1
И (ДопДокументы.Документ2.Тип.Код <> ""000000017""
ИЛИ ТИПЗНАЧЕНИЯ(ДопДокументы.Документ2) <> ТИП(Документ.Требование))
ЛЕВОЕ СОЕДИНЕНИЕ ВТДопДокументы КАК ВТДопДокументы
ПО Выписка.Ссылка = ВТДопДокументы.Документ1
ГДЕ
(Выписка.Состояние.Закрыт = ЛОЖЬ
ИЛИ Выписка.Состояние.Код = 34)
СГРУППИРОВАТЬ ПО
Выписка.Ссылка,
ПараметрыВыписки.ДатаИсполнения,
ВремяОбработкиДокумента.ПроцентОтНормы,
ИсторияОткрытия.Период,
ИсторияОткрытия.Пользователь,
СвойстваДокументов.Значение,
ВТДопДокументы.КоличествоСвязанных
ПоказатьИсходный:
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
Выписка.Номер,
Выписка.ДатаПоследнегоИзменения,
Выписка.КонтактноеЛицо,
Выписка.Услуга,
ВЫРАЗИТЬ(Выписка.Описание КАК СТРОКА(1024)) КАК Описание,
ВЫРАЗИТЬ(Выписка.Замечания КАК СТРОКА(1024)) КАК Замечания,
Выписка.Ответственный,
Выписка.Состояние,
Выписка.Дата,
ПараметрыВыписки.ДатаИсполнения,
ИсторияОткрытия.Период КАК ДатаПоследнегоОткрытия,
ИсторияОткрытия.Пользователь КАК Пользователь,
ВремяОбработкиДокумента.ПроцентОтНормы КАК ПроцентОтНормы,
СвойстваДокументов.Значение КАК Срочно
ИЗ
Документ.Выписка КАК Выписка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПараметрыВыписки КАК ПараметрыВыписки
ПО Выписка.Ссылка = ПараметрыВыписки.Документ
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияОткрытия КАК ИсторияОткрытия
ПО Выписка.Ссылка = ИсторияОткрытия.Документ
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СвойстваДокументов КАК СвойстваДокументов
ПО Выписка.Ссылка = СвойстваДокументов.Документ
И (СвойстваДокументов.Свойство.Код = ""00199"")
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВремяОбработкиДокумента КАК ВремяОбработкиДокумента
ПО Выписка.Ссылка = ВремяОбработкиДокумента.Документ
ГДЕ
(Выписка.Состояние.Закрыт = ЛОЖЬ
ИЛИ Выписка.Состояние.Код = 34)
Показать
(3)
Это совсем никуда не годится. Какая структура регистра?
ВЫБРАТЬ
ДопДокументы.Документ1 КАК Документ1,
КОЛИЧЕСТВО(ДопДокументы.Документ2) КАК КоличествоДополнительных
ПОМЕСТИТЬ ВТДопДокументы
ИЗ
РегистрСведений.ДопДокументы КАК ДопДокументы
ГДЕ
ДопДокументы.Документ1.Ответственный В (&Ответственный)
И ДопДокументы.Документ2.Состояние.Закрыт = ЛОЖЬ
И (ДопДокументы.Документ2.Тип.Код <> ""000000017""
ИЛИ ТИПЗНАЧЕНИЯ(ДопДокументы.Документ2) <> ТИП(Документ.Требование))
СГРУППИРОВАТЬ ПО
ДопДокументы.Документ1
;
ПоказатьЭто совсем никуда не годится. Какая структура регистра?
Во-первых, у вас много измерений типа "Документ": в каждом регистре сведений оно должно быть обязательно 1-м по порядку: если есть еще что-то другое "выше" - типа "Организация" итп... нужно сделать фильтр/соединение и по ней тоже - иначе поиск по индексу не отработает. 2-й момент: надо бы определить интервал дат документов "Выписка", по которым отбор идет. Выбирать все документы за всю историю это очень плохо, надо ОБЯЗАТЕЛЬНО ограничить. И 3-й момент - в документах "Выписка" поле "Состояние" у Вас проиндексировано? если "состояний" немного - это не принципиально (можно не индексировать), главное фильтр по интервалу дат задать. Если много - надо сделать индекс по данному полю, и всевозможные "состояния" упаковать в массив и передавать в запрос параметром
1. Измерения Документ1 и Документ2 - составного типа?
Если Документ1 - да, то в выборке во временную таблицу стоит учитывать что вам нужны только выписки в условии отбора (добавить отбор по типу и сделать приведение типа в условии по ответственному)
2. Во втором запросе пакета у вас кроме соединения с временной таблицей есть также соединение с таблицей регистра, из которго формируется временная таблица, причем по тому же условию
Если Документ1 - да, то в выборке во временную таблицу стоит учитывать что вам нужны только выписки в условии отбора (добавить отбор по типу и сделать приведение типа в условии по ответственному)
2. Во втором запросе пакета у вас кроме соединения с временной таблицей есть также соединение с таблицей регистра, из которго формируется временная таблица, причем по тому же условию
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот