Скорость выполнения запроса после правок

1. user754469 05.11.17 13:51 Сейчас в теме
Здравствуйте, возникла необходимость добавить в запрос получение дополнительных данных. Все реализовано, данные собираются и используются. Но на рабочей базе время выполнения запроса выросло с 0,7-1 сек до 4,5-5 сек. Подскажите, можно ли как то оптимизировать доработанный запрос. Пока только попытался избавится в запросах от ". ." но изменений по времени выполнения нет или очень незначительные. Во вложении запрос после изменений
Прикрепленные файлы:
Запрос_после.txt
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. user754469 05.11.17 13:52 Сейчас в теме
Первоначальный запрос:
Прикрепленные файлы:
запрос_до.txt
3. user754469 05.11.17 13:54 Сейчас в теме
Продублирую код, буду признателен любым рекомендациям.

Итоговый запрос:
ВЫБРАТЬ
	ДопДокументы.Документ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)
Показать
4. spacecraft 05.11.17 15:39 Сейчас в теме
(3)
ВЫБРАТЬ
    ДопДокументы.Документ1 КАК Документ1,
    КОЛИЧЕСТВО(ДопДокументы.Документ2) КАК КоличествоДополнительных
    ПОМЕСТИТЬ ВТДопДокументы
ИЗ
    РегистрСведений.ДопДокументы КАК ДопДокументы
ГДЕ
    ДопДокументы.Документ1.Ответственный В (&Ответственный)
    И ДопДокументы.Документ2.Состояние.Закрыт = ЛОЖЬ
    И (ДопДокументы.Документ2.Тип.Код <> ""000000017""
        ИЛИ ТИПЗНАЧЕНИЯ(ДопДокументы.Документ2) <> ТИП(Документ.Требование))
СГРУППИРОВАТЬ ПО
    ДопДокументы.Документ1
;
Показать

Это совсем никуда не годится. Какая структура регистра?
6. user754469 06.11.17 16:51 Сейчас в теме
(4) Здравствуйте, Регистр содержит 5 Измерений: ВидДокумента1, ВидДокумента2, Документ1, Документ2, ВидСвязи и один ресурс: ГлавнаяСвязь. непериодический
5. artkor 246 05.11.17 16:31 Сейчас в теме
Во-первых, у вас много измерений типа "Документ": в каждом регистре сведений оно должно быть обязательно 1-м по порядку: если есть еще что-то другое "выше" - типа "Организация" итп... нужно сделать фильтр/соединение и по ней тоже - иначе поиск по индексу не отработает. 2-й момент: надо бы определить интервал дат документов "Выписка", по которым отбор идет. Выбирать все документы за всю историю это очень плохо, надо ОБЯЗАТЕЛЬНО ограничить. И 3-й момент - в документах "Выписка" поле "Состояние" у Вас проиндексировано? если "состояний" немного - это не принципиально (можно не индексировать), главное фильтр по интервалу дат задать. Если много - надо сделать индекс по данному полю, и всевозможные "состояния" упаковать в массив и передавать в запрос параметром
7. user754469 06.11.17 16:55 Сейчас в теме
(5) по первому моменту измерений выше нет.
по второму моменту: нужны документы за все время.
по третьему моменту состояний 4 шт.
8. DenisCh 06.11.17 17:32 Сейчас в теме
ДопДокументы.Документ2.Тип.Код <> ""000000017""

Избавься от этого для начала.
9. nickpugachev 06.11.17 23:09 Сейчас в теме
1. Измерения Документ1 и Документ2 - составного типа?
Если Документ1 - да, то в выборке во временную таблицу стоит учитывать что вам нужны только выписки в условии отбора (добавить отбор по типу и сделать приведение типа в условии по ответственному)

2. Во втором запросе пакета у вас кроме соединения с временной таблицей есть также соединение с таблицей регистра, из которго формируется временная таблица, причем по тому же условию
10. user754469 07.11.17 16:55 Сейчас в теме
(9) по 1 спасибо, попробую. по 2. там разные условия. во временную таблицу попадают незакрытые, а во втором запросе дополнительно соединение с таблицей чтобы посчитать общее количество с закрытыми.
11. nickpugachev 07.11.17 21:34 Сейчас в теме
(10) По 2 я имел в виду что там есть общая часть в условии отбора. Может имеет смысл во временную таблицу вытащить все подходящие записи под оба соединения, а уже в соединении нужные подтягивать (и индекс сделать по временной таблице)?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот