Имя: Пароль:
1C
1С v8
Почему тормозит запрос к журналу документов с отбором по массиву ссылок?
,
0 kuzyara
 
15.11.22
08:08
ВЫБРАТЬ
ДокументыОтгрузки.Ссылка КАК Ссылка
ИЗ
ЖурналДокументов.ДокументыОтгрузки КАК ДокументыОтгрузки
ГДЕ
ДокументыОтгрузки.Ссылка В(&МассивСсылок)

вот такой запрос смотрю в профайлере MSSQL транслируется в

exec sp_executesql N'SELECT
T1._DocumentTRef,
T1._DocumentRRef,
T1._Date_Time,
T1._Marked,
T1._Number,
T1._Posted
FROM dbo._DocumentJournal723 T1
WHERE (T1._DocumentTRef + T1._DocumentRRef IN (0x0000002E + P1, 0x0000002D + @P2))',N'P1 varbinary(16),@P2 varbinary(16)',0xAE5400505699CDD411ED52248765BA73,0xAE5400505699CDD411ED522334E63C2E

и выполняется 12 секунд.
Контекст - вывод дополнительный данных в форму списка журнала по событю ПриПолученииДанных в ОФ

Как укорить?
1 НафНаф
 
15.11.22
08:15
(0) интересно кто такой умный прикрутил суммирование? оно же не использует индексы
2 kuzyara
 
15.11.22
08:38
Ответ:
нужно использовать временную таблицу с ссылками

и тогда запрос

ВЫБРАТЬ
усТоварыНаСкладах.Регистратор КАК Регистратор
ИЗ
РегистрНакопления.усТоварыНаСкладах КАК усТоварыНаСкладах
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаСсылок КАК ТаблицаСсылок
ПО усТоварыНаСкладах.Регистратор = ТаблицаСсылок.Ссылка

транслируется в
SELECT
T1._RecorderTRef,
T1._RecorderRRef
FROM dbo._AccumRg2160 T1
INNER JOIN #tt2 T2 WITH(NOLOCK)
ON (0x08 = T2._Q_000_F_001_TYPE AND T1._RecorderTRef = T2._Q_000_F_001_RTRef AND T1._RecorderRRef = T2._Q_000_F_001_RRRef)

и будет использовать индекс по ссылке и будет быстро
3 НафНаф
 
15.11.22
09:27
(2) это какая-то жесть от 1С