Имя: Пароль:
1C
 
Подскажите с запросом
0 Ильф
 
04.03.25
13:44
ВЫБРАТЬ
		ВремяВыполненияСтационар.Период КАК Период,
		ВремяВыполненияСтационар.Регистратор КАК Регистратор,
		ВремяВыполненияСтационар.УникальныйИдентификаторНазначения КАК УникальныйИдентификаторНазначения,
		ВремяВыполненияСтационар.ЗапланированноеВремяВыполненияНазначения КАК ЗапланированноеВремяВыполненияНазначения,
		ВремяВыполненияСтационар.СтатусНазначения КАК СтатусНазначения,
		ВремяВыполненияСтационар.РазоваяДозаИсполнено КАК РазоваяДозаИсполнено,
		ВремяВыполненияСтационар.Комментарий КАК Комментарий,
		ВремяВыполненияСтационар.ВремяВыполненияНазначения КАК ВремяВыполненияНазначения,
		ВремяВыполненияСтационар.Исполнитель КАК Исполнитель
	ПОМЕСТИТЬ втЛистВрачебныхНазначенийВремяВыполненияСтационар
	ИЗ
		РегистрСведений.ЛистВрачебныхНазначенийСтационар.СрезПоследних КАК ЛистВрачебныхНазначений
			ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЛистВрачебныхНазначенийВремяВыполненияСтационар.СрезПоследних(, НАЧАЛОПЕРИОДА(ЗапланированноеВремяВыполненияНазначения, ДЕНЬ) = &Дата) КАК ВремяВыполненияСтационар
			ПО (ВремяВыполненияСтационар.УникальныйИдентификаторНазначения = ЛистВрачебныхНазначений.УникальныйИдентификаторНазначения)
				И (ВЫБОР
					КОГДА ЛистВрачебныхНазначений.МедицинскаяКарта.ДатаЗакрытия = ДАТАВРЕМЯ(1, 1, 1)
						ТОГДА ИСТИНА
					ИНАЧЕ ВремяВыполненияСтационар.ЗапланированноеВремяВыполненияНазначения <= ЛистВрачебныхНазначений.МедицинскаяКарта.ДатаЗакрытия
							ИЛИ ВремяВыполненияСтационар.СтатусНазначения = ЗНАЧЕНИЕ(Перечисление.СтатусыЛекарственногоНазначения.Выполнено)
				КОНЕЦ)
		И ВремяВыполненияСтационар.ЗапланированноеВремяВыполненияНазначения >= НАЧАЛОПЕРИОДА(&ДатаВремяНачала, МИНУТА) 
		И ВремяВыполненияСтационар.ЗапланированноеВремяВыполненияНазначения < НАЧАЛОПЕРИОДА(&ДатаВремяОкончания, МИНУТА)			
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_НазначенияНаТекущуюДату КАК ВТ_НазначенияНаТекущуюДату
			ПО ЛистВрачебныхНазначений.МедицинскаяКарта = ВТ_НазначенияНаТекущуюДату.МедицинскаяКарта


с такими параметрами выполняется 40 сек

Запрос111.УстановитьПараметр("ДатаВремяНачала", '20250301');
Запрос111.УстановитьПараметр("ДатаВремяОкончания", '202503010830');


а вот с такими - 1 сек
Запрос111.УстановитьПараметр("ДатаВремяНачала", '20250301');
Запрос111.УстановитьПараметр("ДатаВремяОкончания", '202503012330');


в чем прикол? как оптимизировать?
1 Хрусталев
 
04.03.25
13:38
Я бы посмотрел трассировку в профайлере
2 Мультук
 
гуру
04.03.25
13:42
(0)

0) >>с такими параметрами выполняется 40 сек

Данные загнали в кэш


>>а вот с такими - 1 сек
Скушали данные из кэша

1) Срезы последних наверное стоит загнать в ВТ с индексацией по "МедицинскаяКарта"

2)
.СрезПоследних(, ЗапланированноеВремяВыполненияНазначения МЕЖДУ &ДатаНачалаДня_Дата и &ДатаКонецДняДата )
3 Ильф
 
04.03.25
13:48
(2) - запрос стабильно выполняется 40 или 1 секунду - т.е. кэш под большим вопросом

интересно именно почему такое поведение (запрос оптимизировал - теперь по 1 секунде всегда)
4 Ильф
 
04.03.25
13:50
+(3) вынес ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_НазначенияНаТекущуюДату КАК ВТ_НазначенияНаТекущуюДату в отдельную ВТ
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.