Запрос выполняется очень долго, помогите оптимизировать
Добрый день ! (Документооборот 1.4)
Есть запрос состоящий из трех подзапросов. Каждый из трех подзапросов выполняется мгновенно.
Но корневой запрос использующий ОБЪЕДИНИТЬ выполняется 21 секунду.
Помогите оптимизировать !
Есть запрос состоящий из трех подзапросов. Каждый из трех подзапросов выполняется мгновенно.
Но корневой запрос использующий ОБЪЕДИНИТЬ выполняется 21 секунду.
Помогите оптимизировать !
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ЕСТЬNULL(СУММА(ВложенныйЗапрос.КоличествоСИстекщимСрокомИсполнения), 0) КАК ИсходящиеДокументыБезОтвета,
ЕСТЬNULL(СУММА(ВложенныйЗапрос.КоличествоСОшибкойВСВДБ), 0) КАК ИсходящиеДокументыВСВДСОшибкой,
ЕСТЬNULL(СУММА(ВложенныйЗапрос.КоличествоГотовыхКОтправкеПоСВД), 0) КАК ИсходящиеДокументыГотовыеКОтправкеПоСВД
ИЗ
(ВЫБРАТЬ
КОЛИЧЕСТВО(*) КАК КоличествоСИстекщимСрокомИсполнения,
0 КАК КоличествоСОшибкойВСВДБ,
0 КАК КоличествоГотовыхКОтправкеПоСВД
ИЗ
Справочник.ИсходящиеДокументы КАК ИсходящиеДокументы
ГДЕ
(ИсходящиеДокументы.Ответственный = &ТекущийПользователь
ИЛИ ИсходящиеДокументы.Ответственный = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
И ИсходящиеДокументы.Подготовил = &ТекущийПользователь)
И НЕ ИсходящиеДокументы.ПометкаУдаления
И ИсходящиеДокументы.СрокИсполнения <> ДАТАВРЕМЯ(1, 1, 1)
И ИсходящиеДокументы.СрокИсполнения < &ТекущаяДата
И НЕ 1 В
(ВЫБРАТЬ
1
ИЗ
РегистрСведений.СвязиДокументов КАК СвязиДокументов
ГДЕ
СвязиДокументов.Документ = ИсходящиеДокументы.Ссылка
И СвязиДокументов.ТипСвязи = ЗНАЧЕНИЕ(Справочник.ТипыСвязей.ПолученОтвет)
И СвязиДокументов.СвязанныйДокумент ССЫЛКА Справочник.ВходящиеДокументы)
И 1 В
(ВЫБРАТЬ
1
ИЗ
Справочник.ИсходящиеДокументы.Получатели КАК ИсходящиеДокументыПолучатели
ГДЕ
ИсходящиеДокументыПолучатели.Ссылка = ИсходящиеДокументы.Ссылка
И ИсходящиеДокументыПолучатели.Отправлен)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
0,
КОЛИЧЕСТВО(*),
0
ИЗ
Справочник.ИсходящиеДокументы КАК ИсходящиеДокументы
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КешИнформацииОбОбъектах КАК КешИнформацииОбОбъектах
ПО ИсходящиеДокументы.Ссылка = КешИнформацииОбОбъектах.Объект
ГДЕ
(ИсходящиеДокументы.Ответственный = &ТекущийПользователь
ИЛИ ИсходящиеДокументы.Ответственный = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
И ИсходящиеДокументы.Подготовил = &ТекущийПользователь)
И НЕ ИсходящиеДокументы.ПометкаУдаления
И КешИнформацииОбОбъектах.СостояниеСВД = ЗНАЧЕНИЕ(Справочник.ВидыСостоянийДокументовВСВД.Ошибка)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
0,
0,
КОЛИЧЕСТВО(*)
ИЗ
(ВЫБРАТЬ
ИсходящиеДокументы.Ссылка КАК Ссылка
ИЗ
Справочник.ИсходящиеДокументы.Получатели КАК ИсходящиеДокументыПолучатели
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ИсходящиеДокументы КАК ИсходящиеДокументы
ПО (ИсходящиеДокументы.Ссылка = ИсходящиеДокументыПолучатели.Ссылка)
ГДЕ
ИсходящиеДокументы.ГотовКОтправке = ИСТИНА
И ИсходящиеДокументы.ПометкаУдаления = ЛОЖЬ
И ИсходящиеДокументыПолучатели.СпособОтправки = ЗНАЧЕНИЕ(Справочник.СпособыДоставки.СВД)
И ИсходящиеДокументыПолучатели.Отправлен = ЛОЖЬ) КАК ГотовыеКОтправке) КАК ВложенныйЗапрос
ПоказатьПо теме из базы знаний
- Оптимизируй это! Или MS SQL и Экспертный подход творят чудеса!
- Руководство по SQL: Как лучше писать запросы (Часть 1)
- Смотрим запросы 1С через Microsoft SQL Profiler по следам ошибок разработчиков, приводящих к проблемам производительности
- Быстрый фронт в базе размером 6.8 терабайт – наши стандарты при разработке и рефакторинге запросов
- Обслуживание индексов MS SQL Server: как, когда и, главное, зачем?
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Переписал на Временные таблицы, - скорость выполнения 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 КАК ВложенныйЗапрос) КАК Запр
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот