powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Помогите, запрос с вложенным подзапросом
7 сообщений из 32, страница 2 из 2
Помогите, запрос с вложенным подзапросом
    #36756869
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tinijivitkhv,

ИМХО vitkhv и Naf привели абсолютно почти 2 одинаковых запроса.

Почти одинаковые, но только почти.
Только у Naf, в SQL будет транслированно тоже самое, что и при таком запросе:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
|ВЫБРАТЬ
|ПоступлениеТоваровУслуг.Ссылка,
|ПоступлениеТоваровУслуг.Организация,
|СУММА(ПоступлениеТоваровУслугТовары.Сумма) КАК Сумма
|ИЗ
|Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг  
|   ПО ПоступлениеТоваровУслуг.Ссылка = ПоступлениеТоваровУслугТовары.Ссылка
|СГРУППИРОВАТЬ ПО
|ПоступлениеТоваровУслуг.Ссылка,
|ПоступлениеТоваровУслуг.Организация


Согласитесь разница все же есть, т.к. ведущей таблицей у нас становиться Табличная Часть товары, а что будет если у документа нет строк в табличной части товары? Такой документ просто не попадет в запрос.

И результат запроса Naf будет идеентичен вот такому запросу с Внутренним соединением :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
|ВЫБРАТЬ
|	ПоступлениеТоваров.Ссылка КАК Документ,
|	ПоступлениеТоваров.Организация
|	СУММА(ПоступлениеТоваровУслугТовары.Сумма) КАК Сумма
|ИЗ
|Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваров
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК               ПоступлениеТоваровУслугТовары ПО ПоступлениеТоваров.Ссылка = ПоступлениеТоваровУслугТовары.Ссылка
|СГРУППИРОВАТЬ ПО ПоступлениеТоваров.Ссылка,
|	ПоступлениеТоваров.Организация
|	
|";


Согласитесь все таки есть разница между Левым соединением и подзапросом в моем варианте запроса и Внутренним соединением в мною приведенным примере и варианте Naf . А из топика собственно непонятно, а подойдет ли такой вариант автору (у автора идет через левое соединение т.е. в результат запроса должны попасть все документы и без разницы, есть там товары или нет ).

+ ко всему запрос с Внутренним соединением будет работать быстрее , чем запрос приведенный NAF. План варианта запроса с Внутренним соединением не будет тратить время на агрегирование (Хотя оно там есть в секции Сгруппировать ПО) и план такого запроса будет практически идентичен моему варианту запроса с подзапросом в секции Левое соединение
+ в варианте Naf будет тем больше времени уходить на "ненужное" агрегирование, чем больше полей у нас будет участвовать всекции СГРУППИРОВАТЬ ПО и я об этом уже писал
Сравните господа планы запросов и убедитесь сами.
P.S. Все таки ведущая таблица (ведущая таблица это та которая находится в секции ИЗ ) в запросе имеет большое значение для производительности, почитайте об этом в форуме про MS SQL. Я когда искал работу, собеседовался с Мега 1С ником, был вопрос про то чем отличается Левое соединение от правого и когда я ему стал говорить про ведущие таблицы он меня просто не понял.
...
Рейтинг: 0 / 0
Помогите, запрос с вложенным подзапросом
    #36756927
Сисой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зато код, написанный Naf, гораздо читабельнее и понятнее.
Стоит ли оптимизировать ВСЕ запросы по скорости? Не думаю. Это удел единичных запросов в модулях проведения. На этапе анализа "узких мест".
...
Рейтинг: 0 / 0
Помогите, запрос с вложенным подзапросом
    #36756935
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Искандер Двурогий Как раз Naf написал правильнее всех. Именно так и рекомендуют сейчас писать разработчики платформы. А остальные никому не нужными извращениями занимаются. Да 1С сама так пишет, а всем остальным смертным рекомендует вот это Программист 1С Но в целом вы правы 1с не рекомендует 2 точки. На экзамене - -0,5 бала.



1С через две точки пишет обычно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
|ВЫБРАТЬ
|ПоступлениеТоваровУслугТовары.Ссылка,
|ПоступлениеТоваровУслугТовары.Ссылка.Контрагент,
|ПоступлениеТоваровУслугТовары.Товар,
|ПоступлениеТоваровУслугТовары.Товар.Артикул,
|ПоступлениеТоваровУслугТовары.Сумма КАК Сумма
|ИЗ
|Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|";

Что при разборе запроса в парсере и отправке серверу, будет идентично вот такому написанию запроса:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
|ВЫБРАТЬ
|ПоступлениеТоваровУслугТовары.Ссылка,
|ПоступлениеТоваров.Контрагент,
|ПоступлениеТоваровУслугТовары.Товар,
|Номенклатура.Артикул,
|ПоступлениеТоваровУслугТовары.Сумма КАК Сумма
|ИЗ
|Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваров КАК ПоступлениеТоваров ПО  ПоступлениеТоваров.Ссылка = ПоступлениеТоваровУслугТовары.Ссылка
|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура ПО Номенклатура.Ссылка = ПоступлениеТоваровУслугТовары.Номенклатура
|";


т.е. парсер за вас просто добавит левое соединение, что очень удобно, и я сам в таком случае сам пишу через вторую точку т.к. в любой случае будет ясно, что сделает 1С с таким запросом перед отрправкой на сервер.
Да и программисты 1С обычно не путаются как и где использовать ведущие таблицы.
Ведь зачем лезть в табличную часть товары чтобы в итоге все поля получать из шапки, да еще и терять в производительности на СГРУППИРОВАТЬ ПО?
...
Рейтинг: 0 / 0
Помогите, запрос с вложенным подзапросом
    #36756960
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СисойЗато код, написанный Naf, гораздо читабельнее и понятнее.
Стоит ли оптимизировать ВСЕ запросы по скорости? Не думаю. Это удел единичных запросов в модулях проведения. На этапе анализа "узких мест".

1. У вариатна Naf есть существенный недостаток, при увелечении количества полей в секции СГРУППИРОВАТЬ ПО существенно падает скорость запроса, если при 2 х полях это 10 % медленней, то при 4 полях это уже порядка на 50 % медленней. Согласитесь, что это уже даже в отчетах критично.

2. Вариант Naf вернет данные идентично вот этому запросу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
|ВЫБРАТЬ
|	ПоступлениеТоваров.Ссылка КАК Документ,
|	ПоступлениеТоваров.Организация
|	СУММА(ПоступлениеТоваровУслугТовары.Сумма) КАК Сумма
|ИЗ
|Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваров
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК  ПоступлениеТоваровУслугТовары ПО ПоступлениеТоваров.Ссылка = ПоступлениеТоваровУслугТовары.Ссылка
|СГРУППИРОВАТЬ ПО 
|   ПоступлениеТоваров.Ссылка,
|   ПоступлениеТоваров.Организация
|	
|";

Разве такой вариант не читабельней варианта Naf?
Да к тому же и быстрее т.к. в этом запросе нет потери производительности в секции СГРУППИРОВАТЬ ПО. А всего та, заменили ведущую таблицу.
...
Рейтинг: 0 / 0
Помогите, запрос с вложенным подзапросом
    #36756997
tiniji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitkhv
P.S. Все таки ведущая таблица (ведущая таблица это та которая находится в секции ИЗ ) в запросе имеет большое значение для производительности, почитайте об этом в форуме про MS SQL. Я когда искал работу, собеседовался с Мега 1С ником, был вопрос про то чем отличается Левое соединение от правого и когда я ему стал говорить про ведущие таблицы он меня просто не понял.

Я бы тоже не понял, потому что конструктор запросов "Правое" превращает в "Левое".

P.S. А где можно почитать про оптимизацию в SQL? Может книжки какие есть?
...
Рейтинг: 0 / 0
Помогите, запрос с вложенным подзапросом
    #36757018
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tinijivitkhv
P.S. Все таки ведущая таблица (ведущая таблица это та которая находится в секции ИЗ ) в запросе имеет большое значение для производительности, почитайте об этом в форуме про MS SQL. Я когда искал работу, собеседовался с Мега 1С ником, был вопрос про то чем отличается Левое соединение от правого и когда я ему стал говорить про ведущие таблицы он меня просто не понял.

Я бы тоже не понял, потому что конструктор запросов "Правое" превращает в "Левое".

P.S. А где можно почитать про оптимизацию в SQL? Может книжки какие есть?Насколько я помню скуль сам может поменять в плане запроса правое на левое...
...
Рейтинг: 0 / 0
Помогите, запрос с вложенным подзапросом
    #36757175
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tiniji
Я бы тоже не понял, потому что конструктор запросов "Правое" превращает в "Левое".

P.S. А где можно почитать про оптимизацию в SQL? Может книжки какие есть?

Конструктором особо не пользуюсь, поэтому не скажу что он там меняет.

Книжку я в свое время читал - SQL для профессионалов. Дэн Тоу. Но не очень она мне понравилась т.к. там все вместе и планы запросов в Oracle, и в DB2 и в MS SQL. Еще помоему в Сибэйз.
Меня только MS SQL интерсовал. Поэтому все остальное было лишним.
А так в основном читал форум на этом сайте по MS SQL.
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / [игнор отключен] [закрыт для гостей] / Помогите, запрос с вложенным подзапросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]