Всем привет! Помогите, пожалуйста, оптимизировать запрос. Очень долго выполняется. Буду рад любому совету, заранее спасибо!
Необходимо получить клиентов сотрудника по условиям: (в тч последнего документа Оценка значение >= 40 И дней с даты окончания договора >=200) ИЛИ количество документов Требование >=5.
Необходимо получить клиентов сотрудника по условиям: (в тч последнего документа Оценка значение >= 40 И дней с даты окончания договора >=200) ИЛИ количество документов Требование >=5.
ВЫБРАТЬ
СотрудникПоДоговоруСрезПоследних.Договор
ПОМЕСТИТЬ Договоры
ИЗ
РегистрСведений.СотрудникПоДоговору.СрезПоследних(, ) КАК СотрудникПоДоговоруСрезПоследних
ГДЕ
СотрудникПоДоговоруСрезПоследних.Сотрудник = &Сотрудник
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
АнкетаКлиента.Ссылка КАК Заявка
ИЗ
Документ.АнкетаКлиента КАК АнкетаКлиента
// Поиск последнего документа Оценка
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
Доки.Контрагент КАК Контрагент,
МАКСИМУМ(Доки.Дата) КАК Дата
ИЗ
Документ.Оценка КАК Доки
СГРУППИРОВАТЬ ПО
Доки.Контрагент) КАК Оценка
ПО АнкетаКлиента.Контрагент = Оценка.Контрагент
// Значение из тч Оценка
ЛЕВОЕ СОЕДИНЕНИЕ Документ.Оценка.ТБ КАК ОценкаКлиента
ПО (ОценкаКлиента.Ссылка.Дата = Оценка.Дата)
И (ОценкаКлиента.Ссылка.Контрагент = Оценка.Контрагент)
// Поиск количества требований
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ТребованиеВозврате.Договор.Владелец КАК Контрагент,
КОЛИЧЕСТВО(*) КАК Количество
ИЗ
Документ.ТребованиеВозврате КАК ТребованиеВозврате
ГДЕ
НЕ ТребованиеВозврате.Ссылка В
(ВЫБРАТЬ
ТребованияПоЭП.Требование
ИЗ
РегистрСведений.ТребованияПоЭП КАК ТребованияПоЭП)
И ТребованиеВозврате.Проведен
И НЕ ТребованиеВозврате.Договор = ЗНАЧЕНИЕ(Справочник.Договоры.ПустаяСсылка)
СГРУППИРОВАТЬ ПО
ТребованиеВозврате.Договор.Владелец) КАК Требования
ПО АнкетаКлиента.Контрагент = Требования.Контрагент
ГДЕ
АнкетаКлиента.Договор В
(ВЫБРАТЬ
Договоры.Договор КАК Договор
ИЗ
Договоры КАК Договоры)
И АнкетаКлиента.Договор.ДатаЗакрытия = &ПустаяДАта
И ОценкаКлиента.Показатель = "Количество просроченных платежей"
И (РАЗНОСТЬДАТ(АнкетаКлиента.Договор.ДатаОкончания, &Сегодня, ДЕНЬ) >= 200
И ОценкаКлиента.Значение >= 40
ИЛИ Требования.Количество >= 5)
СГРУППИРОВАТЬ ПО
АнкетаКлиента.Контрагент,
АнкетаКлиента.Договор,
АнкетаКлиента.Ссылка,
ЛимитТребований.ДатаФормирования,
ЛимитТребований.Доступно,
ОценкаКлиента.Значение,
Требования.Количество,
ВЫБОР
КОГДА РАЗНОСТЬДАТ(АнкетаКлиента.Договор.ДатаОкончания, &Сегодня, ДЕНЬ) >= 200
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
ПоказатьПо теме из базы знаний
- История оптимизации одного большого запроса средствами MSSQL Profiler и 1С
- Оптимизация без оптимизации: как мы ускорили 1С в 10 раз без трудоемкой оптимизации запросов и алгоритмов. Практический опыт
- Руководство по SQL: Как лучше писать запросы (Часть 1)
- Как читать чужой код? Часть 3. Разбор и доработка запросов
- Варианты отладки и оптимизации запросов в 1С
Найденные решения
(1) Святая корова......
Написано так, чтобы максимально затормозить запрос
Отбор в параметры виртуальной таблицы
Все подзапросы в соединениях сделать временными таблицами, выбрать в них нужные поля, по которым будут соединения и отборы и индексировать
после этого возвращайтесь с замерами "до" и "после"
Написано так, чтобы максимально затормозить запрос
........
ИЗ
РегистрСведений.СотрудникПоДоговору.СрезПоследних(, ) КАК СотрудникПоДоговоруСрезПоследних
ГДЕ
СотрудникПоДоговоруСрезПоследних.Сотрудник = &Сотрудник
........
Отбор в параметры виртуальной таблицы
Все подзапросы в соединениях сделать временными таблицами, выбрать в них нужные поля, по которым будут соединения и отборы и индексировать
после этого возвращайтесь с замерами "до" и "после"
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Святая корова......
Написано так, чтобы максимально затормозить запрос
Отбор в параметры виртуальной таблицы
Все подзапросы в соединениях сделать временными таблицами, выбрать в них нужные поля, по которым будут соединения и отборы и индексировать
после этого возвращайтесь с замерами "до" и "после"
Написано так, чтобы максимально затормозить запрос
........
ИЗ
РегистрСведений.СотрудникПоДоговору.СрезПоследних(, ) КАК СотрудникПоДоговоруСрезПоследних
ГДЕ
СотрудникПоДоговоруСрезПоследних.Сотрудник = &Сотрудник
........
Отбор в параметры виртуальной таблицы
Все подзапросы в соединениях сделать временными таблицами, выбрать в них нужные поля, по которым будут соединения и отборы и индексировать
после этого возвращайтесь с замерами "до" и "после"
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот