Помогите оптимизировать запрос

1. aalu14 05.03.24 12:28 Сейчас в теме
Всем привет! Помогите, пожалуйста, оптимизировать запрос. Очень долго выполняется. Буду рад любому совету, заранее спасибо!

Необходимо получить клиентов сотрудника по условиям: (в тч последнего документа Оценка значение >= 40 И дней с даты окончания договора >=200) ИЛИ количество документов Требование >=5.


ВЫБРАТЬ
	СотрудникПоДоговоруСрезПоследних.Договор
ПОМЕСТИТЬ Договоры
ИЗ
	РегистрСведений.СотрудникПоДоговору.СрезПоследних(, ) КАК СотрудникПоДоговоруСрезПоследних
ГДЕ
	СотрудникПоДоговоруСрезПоследних.Сотрудник = &Сотрудник
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	АнкетаКлиента.Ссылка КАК Заявка
ИЗ
	Документ.АнкетаКлиента КАК АнкетаКлиента
	//  Поиск последнего документа Оценка
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			Доки.Контрагент КАК Контрагент,
			МАКСИМУМ(Доки.Дата) КАК Дата
		ИЗ
			Документ.Оценка КАК Доки
		СГРУППИРОВАТЬ ПО
			Доки.Контрагент) КАК Оценка
		ПО АнкетаКлиента.Контрагент = Оценка.Контрагент
		
        //  Значение из тч Оценка
	ЛЕВОЕ СОЕДИНЕНИЕ Документ.Оценка.ТБ КАК ОценкаКлиента
		ПО (ОценкаКлиента.Ссылка.Дата = Оценка.Дата)
			И (ОценкаКлиента.Ссылка.Контрагент = Оценка.Контрагент)
		
        // Поиск количества требований	
	ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ТребованиеВозврате.Договор.Владелец КАК Контрагент,
			КОЛИЧЕСТВО(*) КАК Количество
		ИЗ
			Документ.ТребованиеВозврате КАК ТребованиеВозврате
		ГДЕ
			НЕ ТребованиеВозврате.Ссылка В
						(ВЫБРАТЬ
							ТребованияПоЭП.Требование
						ИЗ
							РегистрСведений.ТребованияПоЭП КАК ТребованияПоЭП)
			И ТребованиеВозврате.Проведен
			И НЕ ТребованиеВозврате.Договор = ЗНАЧЕНИЕ(Справочник.Договоры.ПустаяСсылка)
		СГРУППИРОВАТЬ ПО
			ТребованиеВозврате.Договор.Владелец) КАК Требования
		ПО АнкетаКлиента.Контрагент = Требования.Контрагент
ГДЕ
	АнкетаКлиента.Договор В
			(ВЫБРАТЬ
				Договоры.Договор КАК Договор
			ИЗ
				Договоры КАК Договоры)
	И АнкетаКлиента.Договор.ДатаЗакрытия = &ПустаяДАта
	И ОценкаКлиента.Показатель = "Количество просроченных платежей"
	И (РАЗНОСТЬДАТ(АнкетаКлиента.Договор.ДатаОкончания, &Сегодня, ДЕНЬ) >= 200
				И ОценкаКлиента.Значение >= 40
			ИЛИ Требования.Количество >= 5)

СГРУППИРОВАТЬ ПО
	АнкетаКлиента.Контрагент,
	АнкетаКлиента.Договор,
	АнкетаКлиента.Ссылка,
	ЛимитТребований.ДатаФормирования,
	ЛимитТребований.Доступно,
	ОценкаКлиента.Значение,
	Требования.Количество,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(АнкетаКлиента.Договор.ДатаОкончания, &Сегодня, ДЕНЬ) >= 200
			ТОГДА ИСТИНА
		ИНАЧЕ ЛОЖЬ
	КОНЕЦ
Показать
По теме из базы знаний
Найденные решения
2. nomad_irk 76 05.03.24 13:56 Сейчас в теме
(1) Святая корова......
Написано так, чтобы максимально затормозить запрос

........
ИЗ
    РегистрСведений.СотрудникПоДоговору.СрезПоследних(, ) КАК СотрудникПоДоговоруСрезПоследних
ГДЕ
    СотрудникПоДоговоруСрезПоследних.Сотрудник = &Сотрудник
........

Отбор в параметры виртуальной таблицы

Все подзапросы в соединениях сделать временными таблицами, выбрать в них нужные поля, по которым будут соединения и отборы и индексировать

после этого возвращайтесь с замерами "до" и "после"
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 05.03.24 13:56 Сейчас в теме
(1) Святая корова......
Написано так, чтобы максимально затормозить запрос

........
ИЗ
    РегистрСведений.СотрудникПоДоговору.СрезПоследних(, ) КАК СотрудникПоДоговоруСрезПоследних
ГДЕ
    СотрудникПоДоговоруСрезПоследних.Сотрудник = &Сотрудник
........

Отбор в параметры виртуальной таблицы

Все подзапросы в соединениях сделать временными таблицами, выбрать в них нужные поля, по которым будут соединения и отборы и индексировать

после этого возвращайтесь с замерами "до" и "после"
3. aalu14 05.03.24 15:50 Сейчас в теме
(2)Спасибо, все сделал, как вы подсказали, запрос летает!
4. Agrhh 05.03.24 18:01 Сейчас в теме
Ай, прекратите делать вложение запросы во время соединение, выводите их ВТ и после соединяйте внутренним соединением.
5. aalu14 06.03.24 09:55 Сейчас в теме
Оставьте свое сообщение

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