Имя: Пароль:
1C
 
Оптимизация типового запроса ут 10
,
0 aptomilov
 
16.05.21
06:39
Уже пришлось перейти на новый сервак  
сервер 1С и сервер скуль разделены
на ssd дисках

запрос выполняется  почти минуту. Строчек в документе  700. Документ Отчет о розничных продажах.
Магазинов  20 шт и когда заканчивается рабочий  день начинается коллапс. На старом серваке этот же запрос выполнялся по  5 минут.
Запрос типовой.
Вопрос как можно соптимизировать сие чудо а может есть какие другие решения данного вопроса.

/////////////////////////////////////
ВЫБРАТЬ
    СписанныеТовары.НомерСтрокиДокумента КАК НомерСтрокиДокумента,
    ПартииТоваровНаСкладах.Номенклатура,
    ПартииТоваровНаСкладах.ДокументОприходования КАК ДокументОприходования,
    ПартииТоваровНаСкладах.ДокументОприходования.Дата КАК ДокументОприходованияДата,
    ПартииТоваровНаСкладах.Склад,
    ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры,
    ПартииТоваровНаСкладах.СерияНоменклатуры,
    ПартииТоваровНаСкладах.Качество,
    ПартииТоваровНаСкладах.Заказ,
    ПартииТоваровНаСкладах.КоличествоОстаток КАК Количество,
    ПартииТоваровНаСкладах.СтоимостьОстаток КАК Стоимость,
    ПартииТоваровНаСкладах.СтатусПартии,
    ВЫБОР
        КОГДА СписанныеТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры
            ТОГДА 0
        ИНАЧЕ 1
    КОНЕЦ КАК ЧислоСерияНоменклатуры,
    ВЫБОР
        КОГДА СписанныеТовары.ДокументПартии = НЕОПРЕДЕЛЕНО
            ТОГДА 0
        ИНАЧЕ ВЫБОР
                КОГДА СписанныеТовары.ДокументПартии = ПартииТоваровНаСкладах.ДокументОприходования
                    ТОГДА 0
                ИНАЧЕ 1
            КОНЕЦ
    КОНЕЦ КАК ЧислоДокументОприходования,
    ВЫБОР
        КОГДА СписанныеТовары.ЗаказПартии = НЕОПРЕДЕЛЕНО
            ТОГДА 0
        ИНАЧЕ ВЫБОР
                КОГДА ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ
                    ТОГДА 1
                ИНАЧЕ 0
            КОНЕЦ
    КОНЕЦ КАК ЧислоЗаказ,
    ВЫБОР
        КОГДА ПартииТоваровНаСкладах.СтатусПартии = &НаКомиссию
            ТОГДА 1
        ИНАЧЕ 0
    КОНЕЦ КАК ЧислоСтатусПартии
ИЗ
    РегистрСведений.СписанныеТовары КАК СписанныеТовары
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
        &Дат,
        Номенклатура В
            (ВЫБРАТЬ
                РегистрСведений.СписанныеТовары.Номенклатура
            ИЗ
                РегистрСведений.СписанныеТовары
            ГДЕ
                РегистрСведений.СписанныеТовары.Регистратор = &Ссылка)
        И (Склад В
            (ВЫБРАТЬ
                РегистрСведений.СписанныеТовары.Склад
            ИЗ
                РегистрСведений.СписанныеТовары
            ГДЕ
                РегистрСведений.СписанныеТовары.Регистратор = &Ссылка) ИЛИ Склад = &ПустойСклад)) КАК ПартииТоваровНаСкладах
        ПО СписанныеТовары.Номенклатура = ПартииТоваровНаСкладах.Номенклатура
            И СписанныеТовары.ХарактеристикаНоменклатуры = ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры
            И (ВЫБОР
                КОГДА ПартииТоваровНаСкладах.Качество = &ПустоеКачество
                    ТОГДА ИСТИНА
                ИНАЧЕ ВЫБОР
                        КОГДА СписанныеТовары.Качество = &ПустоеКачество
                            ТОГДА ПартииТоваровНаСкладах.Качество = &КачествоНовый
                        ИНАЧЕ ПартииТоваровНаСкладах.Качество = СписанныеТовары.Качество
                    КОНЕЦ
            КОНЕЦ)
            И (ПартииТоваровНаСкладах.Склад = СписанныеТовары.Склад ИЛИ ПартииТоваровНаСкладах.Склад = &ПустойСклад)
            И (ВЫБОР
                КОГДА СписанныеТовары.ДопустимыйСтатус1 <> &ПустойСтатус
                        ИЛИ СписанныеТовары.ДопустимыйСтатус2 <> &ПустойСтатус
                        ИЛИ СписанныеТовары.ДопустимыйСтатус3 <> &ПустойСтатус
                        ИЛИ СписанныеТовары.ДопустимыйСтатус4 <> &ПустойСтатус
                    ТОГДА ПартииТоваровНаСкладах.СтатусПартии = &ПустойСтатус
                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = &СтатусПартииПоОрдеру
                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус1
                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус2
                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус3
                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус4
                ИНАЧЕ ИСТИНА
            КОНЕЦ)
    
        И (ВЫБОР
            КОГДА СписанныеТовары.СписыватьТолькоПоЗаказу = ИСТИНА
                ТОГДА ВЫБОР
                        КОГДА ПартииТоваровНаСкладах.Заказ <> СписанныеТовары.ЗаказПартии
                            ТОГДА ВЫБОР
                                    КОГДА (НЕ СписанныеТовары.ЗаказПартии = НЕОПРЕДЕЛЕНО)
                                        ТОГДА ЛОЖЬ
                                    ИНАЧЕ ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ
                                КОНЕЦ
                        ИНАЧЕ ИСТИНА
                    КОНЕЦ
            ИНАЧЕ ВЫБОР
                    КОГДА ПартииТоваровНаСкладах.Заказ <> СписанныеТовары.ЗаказПартии
                        ТОГДА ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ
                    ИНАЧЕ ИСТИНА
                КОНЕЦ
        КОНЕЦ)
        И (СписанныеТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры
            ИЛИ ПартииТоваровНаСкладах.СерияНоменклатуры = &ПустаяСерияНоменклатуры
ИЛИ СписанныеТовары.КодОперацииПартииТоваров = &КодРезервирование)
ГДЕ
    СписанныеТовары.Регистратор = &ОсновнойДокумент

УПОРЯДОЧИТЬ ПО
    ЧислоСерияНоменклатуры,
    ЧислоДокументОприходования,
    ЧислоЗаказ,
    ЧислоСтатусПартии,
    ДокументОприходованияДата,
    ДокументОприходования
ИТОГИ ПО
    НомерСтрокиДокумента
1 ДенисЧ
 
16.05.21
06:50
Для начала выдерни все внутренние запросы в временные таблицы (опционально проиндексируй).
А потом смотри план запроса.
2 ASV
 
16.05.21
12:16
ПартииТоваровНаСкладах.ДокументОприходования.Дата КАК ДокументОприходованияДата,

убрать
3 ASV
 
16.05.21
12:20
добавить ВЫРАЗИТЬ


ВЫРАЗИТЬ(СписанныеТовары.Регистратор КАК Документ.ОтчетОККК) = &ОсновнойДокумент

ВЫРАЗИТЬ(РегистрСведений.СписанныеТовары.Регистратор КАК Документ.ОтчетОККК) = &Ссылка
4 RomanYS
 
16.05.21
12:21
Запрос конечно можно пооптимизировать... но в данной ситуации имхо нужно думать о переносе списания партий в оффлайн-режим. Возможно даже в УТ10 есть что-то типовое
5 RomanYS
 
16.05.21
12:32
(3) Это должно что-то ускорить? Сомневаюсь
6 Timon1405
 
16.05.21
12:32
(3) выражать нужно получение реквизитов от составной ссылки. сама ссылка суть строка из 36 символов, не нужно её никуда выражать.
вот (2) - потенциальный источник проблем. лечится архитектурно: заведение отдельного регистра с реквизитами документов и соединением с ним. посмотреть реализацию  можно в УТ11.
7 hhhh
 
16.05.21
12:45
еще советуют ИЛИ убрать и заменить на объединение запросов. Вот это вообще какая-то фигня

            И (ПартииТоваровНаСкладах.Склад = СписанныеТовары.Склад ИЛИ ПартииТоваровНаСкладах.Склад = &ПустойСклад)
            И (ВЫБОР
                КОГДА СписанныеТовары.ДопустимыйСтатус1 <> &ПустойСтатус
                        ИЛИ СписанныеТовары.ДопустимыйСтатус2 <> &ПустойСтатус
                        ИЛИ СписанныеТовары.ДопустимыйСтатус3 <> &ПустойСтатус
                        ИЛИ СписанныеТовары.ДопустимыйСтатус4 <> &ПустойСтатус
                    ТОГДА ПартииТоваровНаСкладах.СтатусПартии = &ПустойСтатус
                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = &СтатусПартииПоОрдеру
                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус1
                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус2
                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус3
                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус4
                ИНАЧЕ ИСТИНА
            КОНЕЦ)
8 braynt
 
16.05.21
15:59
Запрос.Текст =
    "ВЫБРАТЬ *
    |ПОМЕСТИТЬ СписанныеТовары
    |ИЗ
    |    РегистрСведений.СписанныеТовары КАК СписанныеТовары
    |ГДЕ
    |    СписанныеТовары.Регистратор = &ОсновнойДокумент
    |
    |ИНДЕКСИРОВАТЬ ПО
    |Склад,
    |Номенклатура
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    СписанныеТовары.НомерСтрокиДокумента КАК НомерСтрокиДокумента,
    |    ПартииТоваровНаСкладах.Номенклатура,
    |    ПартииТоваровНаСкладах.ДокументОприходования КАК ДокументОприходования,
    |    ПартииТоваровНаСкладах.ДокументОприходования.Дата КАК ДокументОприходованияДата,
    |    ПартииТоваровНаСкладах.Склад,
    |    ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры,
    |    ПартииТоваровНаСкладах.СерияНоменклатуры,
    |    ПартииТоваровНаСкладах.Качество,
    |    ПартииТоваровНаСкладах.Заказ,
    |    ПартииТоваровНаСкладах.КоличествоОстаток КАК Количество,
    |    ПартииТоваровНаСкладах.СтоимостьОстаток КАК Стоимость,
    |    ПартииТоваровНаСкладах.СтатусПартии,
    |    ВЫБОР
    |        КОГДА СписанныеТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры
    |            ТОГДА 0
    |        ИНАЧЕ 1
    |    КОНЕЦ КАК ЧислоСерияНоменклатуры,
    |    ВЫБОР
    |        КОГДА СписанныеТовары.ДокументПартии = НЕОПРЕДЕЛЕНО
    |            ТОГДА 0
    |        ИНАЧЕ ВЫБОР
    |                КОГДА СписанныеТовары.ДокументПартии = ПартииТоваровНаСкладах.ДокументОприходования
    |                    ТОГДА 0
    |                ИНАЧЕ 1
    |            КОНЕЦ
    |    КОНЕЦ КАК ЧислоДокументОприходования,
    |    ВЫБОР
    |        КОГДА СписанныеТовары.ЗаказПартии = НЕОПРЕДЕЛЕНО
    |            ТОГДА 0
    |        ИНАЧЕ ВЫБОР
    |                КОГДА ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ
    |                    ТОГДА 1
    |                ИНАЧЕ 0
    |            КОНЕЦ
    |    КОНЕЦ КАК ЧислоЗаказ,
    |    ВЫБОР
    |        КОГДА ПартииТоваровНаСкладах.СтатусПартии = &НаКомиссию
    |            ТОГДА 1
    |        ИНАЧЕ 0
    |    КОНЕЦ КАК ЧислоСтатусПартии
    |ИЗ
    |    СписанныеТовары КАК СписанныеТовары
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
    |        &Дат,
    |        Номенклатура В
    |            (ВЫБРАТЬ
    |                СписанныеТовары.Номенклатура
    |            ИЗ
    |                СписанныеТовары
    |            ГДЕ
    |                СписанныеТовары.Регистратор = &Ссылка)" + ?(ВестиПартионныйУчетПоСкладам, "
    |        И (Склад В
    |            (ВЫБРАТЬ
    |                СписанныеТовары.Склад
    |            ИЗ
    |                СписанныеТовары
    |            ГДЕ
    |                СписанныеТовары.Регистратор = &Ссылка) ИЛИ Склад = &ПустойСклад)", "") + ") КАК ПартииТоваровНаСкладах
    |        ПО СписанныеТовары.Номенклатура = ПартииТоваровНаСкладах.Номенклатура
    |            И СписанныеТовары.ХарактеристикаНоменклатуры = ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры
    |            И (ВЫБОР
    |                КОГДА ПартииТоваровНаСкладах.Качество = &ПустоеКачество
    |                    ТОГДА ИСТИНА
    |                ИНАЧЕ ВЫБОР
    |                        КОГДА СписанныеТовары.Качество = &ПустоеКачество
    |                            ТОГДА ПартииТоваровНаСкладах.Качество = &КачествоНовый
    |                        ИНАЧЕ ПартииТоваровНаСкладах.Качество = СписанныеТовары.Качество
    |                    КОНЕЦ
    |            КОНЕЦ)
    |            " + ?(ВестиПартионныйУчетПоСкладам, "И (ПартииТоваровНаСкладах.Склад = СписанныеТовары.Склад ИЛИ ПартииТоваровНаСкладах.Склад = &ПустойСклад)", "") + "
    |            И (ВЫБОР
    |                КОГДА СписанныеТовары.ДопустимыйСтатус1 <> &ПустойСтатус
    |                        ИЛИ СписанныеТовары.ДопустимыйСтатус2 <> &ПустойСтатус
    |                        ИЛИ СписанныеТовары.ДопустимыйСтатус3 <> &ПустойСтатус
    |                        ИЛИ СписанныеТовары.ДопустимыйСтатус4 <> &ПустойСтатус
    |                    ТОГДА ПартииТоваровНаСкладах.СтатусПартии = &ПустойСтатус
    |                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = &СтатусПартииПоОрдеру
    |                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус1
    |                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус2
    |                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус3
    |                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус4
    |                ИНАЧЕ ИСТИНА
    |            КОНЕЦ)
    |    
    |        И (ВЫБОР
    |            КОГДА СписанныеТовары.СписыватьТолькоПоЗаказу = ИСТИНА
    |                ТОГДА ВЫБОР
    |                        КОГДА ПартииТоваровНаСкладах.Заказ <> СписанныеТовары.ЗаказПартии
    |                            ТОГДА ВЫБОР
    |                                    КОГДА (НЕ СписанныеТовары.ЗаказПартии = НЕОПРЕДЕЛЕНО)
    |                                        ТОГДА ЛОЖЬ
    |                                    ИНАЧЕ ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ
    |                                КОНЕЦ
    |                        ИНАЧЕ ИСТИНА
    |                    КОНЕЦ
    |            ИНАЧЕ ВЫБОР
    |                    КОГДА ПартииТоваровНаСкладах.Заказ <> СписанныеТовары.ЗаказПартии
    |                        ТОГДА ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ
    |                    ИНАЧЕ ИСТИНА
    |                КОНЕЦ
    |        КОНЕЦ)
    |        И (СписанныеТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры
    |            ИЛИ ПартииТоваровНаСкладах.СерияНоменклатуры = &ПустаяСерияНоменклатуры)
    |ГДЕ
    |    СписанныеТовары.Регистратор = &ОсновнойДокумент
    |
    |УПОРЯДОЧИТЬ ПО
    |    ЧислоСерияНоменклатуры,
    |    ЧислоДокументОприходования,
    |    ЧислоЗаказ,
    |    ЧислоСтатусПартии" + ?(СтратегияСтатусПартии = Перечисления.СтретегииСписанияПартийТоваровПоСтатусам.СначалаПринятыеПотомСобственные, " Убыв", "") + ",
    |    ДокументОприходованияДата" + ?(СпособОценкиМПЗ = "ЛИФО", " Убыв","") + ",
    |    ДокументОприходования" + ?(СпособОценкиМПЗ = "ЛИФО", " Убыв","") + "
    |ИТОГИ ПО
    |    НомерСтрокиДокумента";
9 ndrv
 
16.05.21
19:54
(0), (8)

    "ВЫБРАТЬ *
    |ПОМЕСТИТЬ СписанныеТовары
    |ИЗ
    |    РегистрСведений.СписанныеТовары КАК СписанныеТовары
    |ГДЕ
    |    СписанныеТовары.Регистратор = &ОсновнойДокумент
    |
    |ИНДЕКСИРОВАТЬ ПО
    |Склад,
    |Номенклатура
    |;
    |
    ////////////////////////////////////////////////////////////////////////////////
---
    |ИЗ
    |    СписанныеТовары КАК СписанныеТовары
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
    |        &Дат,
    |        (Номенклатура, Склад) В (Выбрать Номенклатура, Склад ИЗ СписанныеТовары)
11 RomanYS
 
16.05.21
19:58
(9) нельзя, склад пустой может быть
12 rsv
 
16.05.21
20:24
(0) в условиях джойна куча кейсов ( выбор когда)
13 Ivan_495
 
16.05.21
20:26
а где блокировки на уровне записей?
14 Ivan_495
 
16.05.21
20:50
что за бред
ИЗ
    РегистрСведений.СписанныеТовары КАК СписанныеТовары
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
        &Дат,
        Номенклатура В
            (ВЫБРАТЬ
                РегистрСведений.СписанныеТовары.Номенклатура
            ИЗ
                РегистрСведений
здесь циклит
15 RomanYS
 
16.05.21
21:41
(14) Это не бред. Использовать отборы в параметрах ВТ - почти обязательное правило. Конкретно без этого точно будет хуже, если конечно они каждый день весь ассортимент не продают.
16 Ivan_495
 
16.05.21
21:55
ну хотя бы в вт сначала отобранную номенклатуру положить , а вообще профайле смотреть надо.
17 RomanYS
 
16.05.21
22:10
(16) Ну это уже много раз выше предложили. Другой вопрос насколько эффективно, движения с отбором по регистратору по идее и так должны быстро читаться. Не факт что создать ВТ и читать из неё будет прямо заметно быстрее, но выглядит логично. Основные тормоза в соединении. И не факт что запрос удастся ускорить на порядок, а ускорение в 2-3 раза всех проблем не решит, поэтому выход в (4)
18 xXeNoNx
 
16.05.21
22:14
(15) А использование подзапросов в запросе прямо идеально, так?
19 Ivan_495
 
16.05.21
22:14
если в join ах действительно много отборов, убирать отборы и смотреть скорость
20 xXeNoNx
 
16.05.21
22:16
(17) ну ну..., соединение с подзапрсом будет идеально читаться, а про ошибки оптимизатора при соединении с подзапросом слыхали?
21 xXeNoNx
 
16.05.21
22:17
(15) >> Конкретно без этого точно будет хуже - ой не факт
22 Ivan_495
 
16.05.21
22:18
узнать как работает оптимизатор 1с можно только в профайлере
23 Ivan_495
 
16.05.21
22:19
либо упрощая запросик
24 xXeNoNx
 
16.05.21
22:21
(22) в чем мысль?
25 Ivan_495
 
16.05.21
22:22
пусть (0) профайлер покажет
26 Ivan_495
 
16.05.21
22:24
и фигню про которую (7) пишет убрать
27 RomanYS
 
16.05.21
22:29
(18) 1. "Прочитать" таблицу остатков целиком в среднем явно большее зло.
     2. Использование временной таблицы от подзапроса к ней вроде не освобождает.
Мне как бы чтение много раз из базы тоже не нравится на подсознательном уровне, но в данном случае сомневаюсь что это решит проблему.

(20) где здесь соединение с подзапросом?
28 RomanYS
 
16.05.21
22:33
(21) В среднем будет хуже, если у тебя остатков по десятку тысяч позиций, а в накладной десяток позиций - точно будет медленнее без отбора. В данном конкретном случае может и не быть медленнее, если в этой рознице за день в  среднем продается 50-100% ассортимента
29 Ivan_495
 
16.05.21
22:33
нужно сделать запрос , как в (9) потом сохранить его в вт и уже с этой маленкой вт играться с отборами, тогда все будет летать
30 xXeNoNx
 
16.05.21
22:34
(27) Соединение с виртуальной таблицей посмотри как разворачивается + твои отборы этой виртуальной таблицей

1. Никто не говорит что читать нужно всю таблицу остатков
2. Использование временной таблицы освобождает от соединения с подзапросом, подзапросом....,
31 xXeNoNx
 
16.05.21
22:38
(28) -> (30) Соединение с виртуальной таблицей остатков(считай с подзапросом) отбор обязательно нужен. но никак не в соединении
32 Ivan_495
 
16.05.21
22:44
запрос ТС может обрабатывать миллиарды строк, после отбора по номенклатуре и помещения этого отбора в вт , мы уже работаем с таблицей в 700 строк ))
33 xXeNoNx
 
16.05.21
22:53
(32) врятли
ГДЕ
    СписанныеТовары.Регистратор = &ОсновнойДокумент
34 RomanYS
 
16.05.21
22:58
(32) вроде для этого и нужен отбор в параметрах виртуальной таблицы.
(31) о, хоть понятно стало про какие подзапросы идёт речь. Именно что не в соединении а параметрах.
Ладно, что-то я запутался что вы предлагаете. Против (8) я не возражаю, сам бы так сделал. Но на порядок это не ускорит

(33) кстати по идее это условие как раз правильнее в соединение засунуть, хотя оптимизатор наверняка это сам разруливает
35 Cthulhu
 
16.05.21
23:15
https://its.1c.ru/db/metod8dev#content:5842:hdoc
(не один пункт причем)
36 xXeNoNx
 
16.05.21
23:19
(34) Вынос запроса к вирт таблице остатков в подзапрос, вычисление полей соединений заранее, не в параметрах соединения
37 xXeNoNx
 
16.05.21
23:23
(36) подзапрос = ВТ
38 RomanYS
 
16.05.21
23:41
(36) я только "за", только не очень очевидно что им как вычислить заранее.
Кстати в статье от 2013 года утверждается, что (8) даёт ускорение почти на порядок
https://infostart.ru/1c/articles/191732/
39 RomanYS
 
16.05.21
23:59
(36) В актуальной УПП кстати как раз остатки собираются в ВрТ без какого-либо вычисления полей, дальнейшее соединение - чисто как в (0). И (8) там тоже нет.
40 aptomilov
 
17.05.21
07:54
По (4) да там есть в уч политике  проводить партии сразу или потом, если потом то проведение партий не исполнятся и запрос тоже.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший