Запрос выполняется очень долго, помогите оптимизировать

1. Vitaly1C8 13.07.17 10:55 Сейчас в теме
Добрый день ! (Документооборот 1.4)
Есть запрос состоящий из трех подзапросов. Каждый из трех подзапросов выполняется мгновенно.
Но корневой запрос использующий ОБЪЕДИНИТЬ выполняется 21 секунду.
Помогите оптимизировать !

ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ЕСТЬNULL(СУММА(ВложенныйЗапрос.КоличествоСИстекщимСрокомИсполнения), 0) КАК ИсходящиеДокументыБезОтвета,
	ЕСТЬNULL(СУММА(ВложенныйЗапрос.КоличествоСОшибкойВСВДБ), 0) КАК ИсходящиеДокументыВСВДСОшибкой,
	ЕСТЬNULL(СУММА(ВложенныйЗапрос.КоличествоГотовыхКОтправкеПоСВД), 0) КАК ИсходящиеДокументыГотовыеКОтправкеПоСВД
ИЗ
	(ВЫБРАТЬ
		КОЛИЧЕСТВО(*) КАК КоличествоСИстекщимСрокомИсполнения,
		0 КАК КоличествоСОшибкойВСВДБ,
		0 КАК КоличествоГотовыхКОтправкеПоСВД
	ИЗ
		Справочник.ИсходящиеДокументы КАК ИсходящиеДокументы
	ГДЕ
		(ИсходящиеДокументы.Ответственный = &ТекущийПользователь
				ИЛИ ИсходящиеДокументы.Ответственный = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
					И ИсходящиеДокументы.Подготовил = &ТекущийПользователь)
		И НЕ ИсходящиеДокументы.ПометкаУдаления
		И ИсходящиеДокументы.СрокИсполнения <> ДАТАВРЕМЯ(1, 1, 1)
		И ИсходящиеДокументы.СрокИсполнения < &ТекущаяДата
		И НЕ 1 В
					(ВЫБРАТЬ
						1
					ИЗ
						РегистрСведений.СвязиДокументов КАК СвязиДокументов
					ГДЕ
						СвязиДокументов.Документ = ИсходящиеДокументы.Ссылка
						И СвязиДокументов.ТипСвязи = ЗНАЧЕНИЕ(Справочник.ТипыСвязей.ПолученОтвет)
						И СвязиДокументов.СвязанныйДокумент ССЫЛКА Справочник.ВходящиеДокументы)
		И 1 В
				(ВЫБРАТЬ
					1
				ИЗ
					Справочник.ИсходящиеДокументы.Получатели КАК ИсходящиеДокументыПолучатели
				ГДЕ
					ИсходящиеДокументыПолучатели.Ссылка = ИсходящиеДокументы.Ссылка
					И ИсходящиеДокументыПолучатели.Отправлен)
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		0,
		КОЛИЧЕСТВО(*),
		0
	ИЗ
		Справочник.ИсходящиеДокументы КАК ИсходящиеДокументы
			ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КешИнформацииОбОбъектах КАК КешИнформацииОбОбъектах
			ПО ИсходящиеДокументы.Ссылка = КешИнформацииОбОбъектах.Объект
	ГДЕ
		(ИсходящиеДокументы.Ответственный = &ТекущийПользователь
				ИЛИ ИсходящиеДокументы.Ответственный = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
					И ИсходящиеДокументы.Подготовил = &ТекущийПользователь)
		И НЕ ИсходящиеДокументы.ПометкаУдаления
		И КешИнформацииОбОбъектах.СостояниеСВД = ЗНАЧЕНИЕ(Справочник.ВидыСостоянийДокументовВСВД.Ошибка)
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		0,
		0,
		КОЛИЧЕСТВО(*)
	ИЗ
		(ВЫБРАТЬ
			ИсходящиеДокументы.Ссылка КАК Ссылка
		ИЗ
			Справочник.ИсходящиеДокументы.Получатели КАК ИсходящиеДокументыПолучатели
				ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ИсходящиеДокументы КАК ИсходящиеДокументы
				ПО (ИсходящиеДокументы.Ссылка = ИсходящиеДокументыПолучатели.Ссылка)
		ГДЕ
			ИсходящиеДокументы.ГотовКОтправке = ИСТИНА
			И ИсходящиеДокументы.ПометкаУдаления = ЛОЖЬ
			И ИсходящиеДокументыПолучатели.СпособОтправки = ЗНАЧЕНИЕ(Справочник.СпособыДоставки.СВД)
			И ИсходящиеДокументыПолучатели.Отправлен = ЛОЖЬ) КАК ГотовыеКОтправке) КАК ВложенныйЗапрос
Показать
По теме из базы знаний
Найденные решения
2. TODD22 18 13.07.17 10:56 Сейчас в теме
Попробуйте подзапросы переписать на временные таблицы как вариант.
Vitaly1C8; ipoloskov; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. TODD22 18 13.07.17 10:56 Сейчас в теме
Попробуйте подзапросы переписать на временные таблицы как вариант.
Vitaly1C8; ipoloskov; +2 Ответить
3. Vitaly1C8 13.07.17 11:48 Сейчас в теме
Переписал на Временные таблицы, - скорость выполнения 0.27 сек
ВЫБРАТЬ
				ЕСТЬNULL(КОЛИЧЕСТВО(*), 0) КАК КоличествоСИстекщимСрокомИсполнения,
				0 КАК КоличествоСОшибкойВСВДБ,
				0 КАК КоличествоГотовыхКОтправкеПоСВД
			ПОМЕСТИТЬ ВТ1
			ИЗ
				Справочник.ИсходящиеДокументы КАК ИсходящиеДокументы
			ГДЕ
				(ИсходящиеДокументы.Ответственный = &ТекущийПользователь
						ИЛИ ИсходящиеДокументы.Ответственный = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
							И ИсходящиеДокументы.Подготовил = &ТекущийПользователь)
				И НЕ ИсходящиеДокументы.ПометкаУдаления
				И ИсходящиеДокументы.СрокИсполнения <> ДАТАВРЕМЯ(1, 1, 1)
				И ИсходящиеДокументы.СрокИсполнения < &ТекущаяДата
				И НЕ 1 В
							(ВЫБРАТЬ
								1
							ИЗ
								РегистрСведений.СвязиДокументов КАК СвязиДокументов
							ГДЕ
								СвязиДокументов.Документ = ИсходящиеДокументы.Ссылка
								И СвязиДокументов.ТипСвязи = ЗНАЧЕНИЕ(Справочник.ТипыСвязей.ПолученОтвет)
								И СвязиДокументов.СвязанныйДокумент ССЫЛКА Справочник.ВходящиеДокументы)
				И 1 В
						(ВЫБРАТЬ
							1
						ИЗ
							Справочник.ИсходящиеДокументы.Получатели КАК ИсходящиеДокументыПолучатели
						ГДЕ
							ИсходящиеДокументыПолучатели.Ссылка = ИсходящиеДокументы.Ссылка
							И ИсходящиеДокументыПолучатели.Отправлен)
			;
				
			ВЫБРАТЬ
				0 КАК КоличествоСИстекщимСрокомИсполнения,
				ЕСТЬNULL(КОЛИЧЕСТВО(*), 0) КАК КоличествоСОшибкойВСВДБ,
				0 КАК КоличествоГотовыхКОтправкеПоСВД
			ПОМЕСТИТЬ ВТ2
			ИЗ
				Справочник.ИсходящиеДокументы КАК ИсходящиеДокументы
					ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КешИнформацииОбОбъектах КАК КешИнформацииОбОбъектах
					ПО ИсходящиеДокументы.Ссылка = КешИнформацииОбОбъектах.Объект
			ГДЕ
				(ИсходящиеДокументы.Ответственный = &ТекущийПользователь
						ИЛИ ИсходящиеДокументы.Ответственный = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
							И ИсходящиеДокументы.Подготовил = &ТекущийПользователь)
				И НЕ ИсходящиеДокументы.ПометкаУдаления
				И КешИнформацииОбОбъектах.СостояниеСВД = ЗНАЧЕНИЕ(Справочник.ВидыСостоянийДокументовВСВД.Ошибка)
			;
						
			ВЫБРАТЬ
				0 КАК КоличествоСИстекщимСрокомИсполнения,
				0 КАК КоличествоСОшибкойВСВДБ,
				ЕСТЬNULL(КОЛИЧЕСТВО(*), 0) КАК КоличествоГотовыхКОтправкеПоСВД
			ПОМЕСТИТЬ ВТ3
			ИЗ
				(ВЫБРАТЬ
					ИсходящиеДокументы.Ссылка КАК Ссылка
				ИЗ
					Справочник.ИсходящиеДокументы.Получатели КАК ИсходящиеДокументыПолучатели
						ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ИсходящиеДокументы КАК ИсходящиеДокументы
						ПО (ИсходящиеДокументы.Ссылка = ИсходящиеДокументыПолучатели.Ссылка)
				ГДЕ
					ИсходящиеДокументы.ГотовКОтправке = ИСТИНА
					И ИсходящиеДокументы.ПометкаУдаления = ЛОЖЬ
					И ИсходящиеДокументыПолучатели.СпособОтправки = ЗНАЧЕНИЕ(Справочник.СпособыДоставки.СВД)
					И ИсходящиеДокументыПолучатели.Отправлен = ЛОЖЬ) КАК ГотовыеКОтправке
			;
			
			ВЫБРАТЬ РАЗРЕШЕННЫЕ
				ЕСТЬNULL(СУММА(КоличествоСИстекщимСрокомИсполнения), 0) КАК ИсходящиеДокументыБезОтвета,
				ЕСТЬNULL(СУММА(КоличествоСОшибкойВСВДБ), 0) КАК ИсходящиеДокументыВСВДСОшибкой,
				ЕСТЬNULL(СУММА(КоличествоГотовыхКОтправкеПоСВД), 0) КАК ИсходящиеДокументыГотовыеКОтправкеПоСВД
			ИЗ (
			ВЫБРАТЬ * ИЗ ВТ1 
			    ОБЪЕДИНИТЬ ВСЕ
			ВЫБРАТЬ * ИЗ ВТ2 
			    ОБЪЕДИНИТЬ ВСЕ
			ВЫБРАТЬ * ИЗ ВТ3 КАК ВложенныйЗапрос) КАК Запр
Показать
Оставьте свое сообщение

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