ВЫБРАТЬ ПЕРВЫЕ 1
НоменклатураОсн.Ссылка КАК Ссылка,
НоменклатураОсн.Наименование,
ЕСТЬNULL(ОстаткиТоваровКомпанииОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
ЕСТЬNULL(ОстаткиТоваровКомпанииОстатки.РезервОстаток, 0) КАК РезервОстаток
ИЗ
Справочник.Номенклатура КАК НоменклатураОсн
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваровКомпании.Остатки(, ) КАК ОстаткиТоваровКомпанииОстатки
ПО НоменклатураОсн.Ссылка = ОстаткиТоваровКомпанииОстатки.Номенклатура
Показать
Вывод в трассировке:
exec sp_executesql N'SEL ECT TOP 1
T1._IDRRef,
T1._Description,
ISNULL(T2.Fld8223Balance_,@P1),
ISNULL(T2.Fld8224Balance_,@P2)
FR OM dbo._Reference112 T1
LEFT OUTER JOIN (SELECT
T3._Fld8220RRef AS Fld8220RRef,
CAST(SUM(T3._Fld8224) AS NUMERIC(27, 3)) AS Fld8224Balance_,
CAST(SUM(T3._Fld8223) AS NUMERIC(27, 3)) AS Fld8223Balance_
FR OM dbo._AccumRgT8233 T3
WH ERE T3._Period = @P3 AND (T3._Fld8224 <> @P4 OR T3._Fld8223 <> @P5) AND (T3._Fld8224 <> @P6 OR T3._Fld8223 <> @P7)
GROUP BY T3._Fld8220RRef
HAVING (CAST(SUM(T3._Fld8224) AS NUMERIC(27, 3))) <> 0.0 OR (CAST(SUM(T3._Fld8223) AS NUMERIC(27, 3))) <> 0.0) T2
ON (T1._IDRRef = T2.Fld8220RRef)',N'@P1 numeric(10),@P2 numeric(10),@P3 datetime2(3),@P4 numeric(10),@P5 numeric(10),@P6 numeric(10),@P7 numeric(10)',0,0,'5999-11-01 00:00:00',0,0,0,0
Показать
Что не так в этом коде, как оптимизировать?
План запроса (разделил на 2 части, т.к. не помещается):
(1) Выбери сначала 1 номенклатуру во временную таблицу, потом уже соединяйся с регистром накопления и в параметрах виртуальной таблицы сделай отбор по этой выбранной номенклатуре.
Какой смысл вообще выбирать первую произвольную номенклатуру и выводить ее остатки?
Там отбор по номенклатуре не потерялся?
(4) Когда руками запрос пишешь, обычно понимаешь что делаешь. А ты, не включая голову, мышкой дичь накликиваешь, а потом удивляешся, что план запроса дикий.
прежде чем что-то оптимизировать, надо понимать задачу и требования к результату. А здесь мы видим какие-то обрывки чего-то обучающего, это надо оптимизировать вопросами к преподавателю.
ВЫБРАТЬ ПЕРВЫЕ 1
Номенклатура КАК Ссылка,
Номенклатура.Наименование,
КоличествоОстаток,
РезервОстаток
ИЗ
РегистрНакопления.ОстаткиТоваровКомпании.Остатки