Имя: Пароль:
1C
 
Какое условие соединения быстрее
0 Прохожий
 
19.10.25
15:21
По замерам вроде не особо разница
1 Прохожий
 
19.10.25
15:22
|    РегистрНакопления.Продажи.Обороты(
    |            ,
    |            ,
    |            Регистратор,
    |            ДокументПродажи В
    |                (ВЫБРАТЬ
    |                    Реализации.Реализация
    |                ИЗ
    |                    ВТ_Реализации КАК Реализации)) КАК ПродажиОбороты
    |        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Реализации КАК Реализации
    |        ПО (ВЫБОР
    |                КОГДА ПродажиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
    |                    ТОГДА Реализации.Реализация = (ВЫРАЗИТЬ(ПродажиОбороты.Регистратор КАК Документ.РеализацияТоваровУслуг))
    |                ИНАЧЕ ЛОЖЬ
    |            КОНЕЦ)
    |        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Реализации КАК Возврат
    |        ПО (ВЫБОР
    |                КОГДА ПродажиОбороты.Регистратор ССЫЛКА Документ.ВозвратТоваровОтПокупателя
    |                    ТОГДА Возврат.Реализация = (ВЫРАЗИТЬ(ВЫРАЗИТЬ(ПродажиОбороты.Регистратор КАК Документ.ВозвратТоваровОтПокупателя).ДокументОснование КАК Документ.РеализацияТоваровУслуг))
    |                ИНАЧЕ ЛОЖЬ
    |            КОНЕЦ)
2 Прохожий
 
19.10.25
15:22
|    РегистрНакопления.Продажи.Обороты(
    |            ,
    |            ,
    |            Регистратор,
    |            ДокументПродажи В
    |                (ВЫБРАТЬ
    |                    Реализации.Реализация
    |                ИЗ
    |                    ВТ_Реализации КАК Реализации)) КАК ПродажиОбороты
    |        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Реализации КАК Реализации
    |        ПО (Реализации.Реализация = (ВЫРАЗИТЬ(ПродажиОбороты.Регистратор КАК Документ.РеализацияТоваровУслуг)))
    |        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Реализации КАК Возврат
    |        ПО (Возврат.Реализация = (ВЫРАЗИТЬ(ВЫРАЗИТЬ(ПродажиОбороты.Регистратор КАК Документ.ВозвратТоваровОтПокупателя).ДокументОснование КАК Документ.РеализацияТоваровУслуг)))
3 Прохожий
 
19.10.25
15:23
Есть смысл через Выбор проверять регистратор и дальше не лезть?
4 Волшебник
 
19.10.25
15:37
Может сделаете замер производительности?
5 maxab72
 
19.10.25
15:59
(0) Надо смотреть на тот запрос, что сформирует SQL. А это зависит не только от текста самого запроса.
6 Прохожий
 
19.10.25
15:59
Сделал. Разницы практически нет.
7 Прохожий
 
19.10.25
16:01
(5) Тогда выберу второй. Он классичнее. Просто сама идея первого до конца не понятна. Вот возвратов же меньше гораздо. Дешевле проверить на ссылку или соединить с двумя таблицами регистратор?
8 maxab72
 
19.10.25
16:24
(7) вполне возможно, что SQL для этих двух вариантов сгенерил два идентичных конечных запроса к базе. и поэтому, действительно, лучше остановиться на запросе с более прозрачной структурой (самому же потом в него придется когда-нибудь лезть).
9 Wern
 
19.10.25
16:30
Вот это
"(ВЫРАЗИТЬ(ПродажиОбороты.Регистратор КАК Документ.РеализацияТоваровУслуг))"
тоже можно убрать до
"ПродажиОбороты.Регистратор"
и
"ВЫРАЗИТЬ(ВЫРАЗИТЬ(ПродажиОбороты.Регистратор КАК Документ.ВозвратТоваровОтПокупателя).ДокументОснование КАК Документ.РеализацияТоваровУслуг)))"
преврати в
"ВЫРАЗИТЬ(ПродажиОбороты.Регистратор КАК Документ.ВозвратТоваровОтПокупателя).ДокументОснование)"

ВЫРАЗИТЬ надо чтоб исключить обращение к лишним таблицам, а  тут идет обращение только к УИД который записан в самом реквизите никакого обращения к таблицам не идет потому ВЫРАЗИТЬ не нужно оно ничего не делает. А вот при обращении к ".ДокументОснование" ВЫРАЗИТЬ нужно.

Потому и эти условия ВЫБОР тоже почти ничего не делают. Мы обращаемся к тому что лежит в поле Регистратор, тип в этом поле тоже есть, потому в первом запросе будут 2 проверки первая на тип вторая на УИД, во втором только одна на УИД. Теоретически второй случай быстрее, но разница совсем минимальная. Никак лишних соединений тут нет ни в первом, ни во втором случае.
10 Dmitrii
 
гуру
19.10.25
16:44
(1) Зачем такие сложные конструкции?
Замени ВЫБОР на обычное условие.
Вместо

|ПО (ВЫБОР
|     КОГДА ПродажиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
|       ТОГДА Реализации.Реализация = (ВЫРАЗИТЬ(ПродажиОбороты.Регистратор КАК Документ.РеализацияТоваровУслуг))
|     ИНАЧЕ ЛОЖЬ
|   КОНЕЦ)

написать:

|ПО ПродажиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
|   И Реализации.Реализация = ПродажиОбороты.Регистратор
11 Прохожий
 
19.10.25
20:38
(9, 10) Да, так интересно