1С трассировка. Что не так в этом коде с левым соединением?

1. user1909662 28.11.24 11:24 Сейчас в теме
Код в 1С:

ВЫБРАТЬ ПЕРВЫЕ 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 части, т.к. не помещается):
Прикрепленные файлы:
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 35 28.11.24 11:54 Сейчас в теме
(1) Выбери сначала 1 номенклатуру во временную таблицу, потом уже соединяйся с регистром накопления и в параметрах виртуальной таблицы сделай отбор по этой выбранной номенклатуре.

Какой смысл вообще выбирать первую произвольную номенклатуру и выводить ее остатки?
Там отбор по номенклатуре не потерялся?
3. user1863362 28.11.24 12:02 Сейчас в теме
(1)
ОстаткиТоваровКомпанииОстатки
КонструкторЗапросовКонструктор

Вручную напиши, может голова включится.
4. user1909662 28.11.24 12:08 Сейчас в теме
(3) а что не так с этим названием?
7. user1863362 28.11.24 12:23 Сейчас в теме
(4) Когда руками запрос пишешь, обычно понимаешь что делаешь. А ты, не включая голову, мышкой дичь накликиваешь, а потом удивляешся, что план запроса дикий.
5. starjevschik 28.11.24 12:10 Сейчас в теме
(1)
как оптимизировать

прежде чем что-то оптимизировать, надо понимать задачу и требования к результату. А здесь мы видим какие-то обрывки чего-то обучающего, это надо оптимизировать вопросами к преподавателю.
user1863362; +1 Ответить
11. SlavaKron 28.11.24 12:55 Сейчас в теме
(1)
как оптимизировать
ВЫБРАТЬ ПЕРВЫЕ 1
    Номенклатура КАК Ссылка,
    Номенклатура.Наименование,
    КоличествоОстаток,
    РезервОстаток
ИЗ
    РегистрНакопления.ОстаткиТоваровКомпании.Остатки
12. spacecraft 28.11.24 13:21 Сейчас в теме
(11) не равнозначный код. Первый не обязательно должен иметь остаток.
6. user1909662 28.11.24 12:17 Сейчас в теме
Получается сперва то что в левом соединении читается, а после основная таблица? (судя по плану запроса)
8. user1863362 28.11.24 12:24 Сейчас в теме
(6) Рановато тебе в трассировку лезть.
9. user1909662 28.11.24 12:46 Сейчас в теме
(8) А куда лезть до трассировки? (помимо программирования) Какие литературы посоветуете? (помимо Хрусталева, Радченко)
10. Sashares 35 28.11.24 12:49 Сейчас в теме
(9) Стандарты разработки конфигураций почитайте, много полезного
https://its.1c.ru/db/v8std#browse:13:-1
Оставьте свое сообщение

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