Имя: Пароль:
1C
 
Оптимизация запроса, долго работает
0 НоваяВолна
 
23.12.21
06:32
Собственно сабж и сам запрос


ВЫБРАТЬ РАЗЛИЧНЫЕ
    Событие.ЛицевойСчет
ПОМЕСТИТЬ СписокЛС
ИЗ
    Документ.Событие КАК Событие
ГДЕ
    Событие.Дата МЕЖДУ &НачалоПериода И КОНЕЦПЕРИОДА(&ОкончаниеПериода, ДЕНЬ)
    И НЕ Событие.ПометкаУдаления
    И Событие.Ответственный В(&СписокСотрудников)
    И Событие.ЛицевойСчет <> ЗНАЧЕНИЕ(Справочник.ЛицевыеСчета.ПустаяСсылка)
;

////////////////////////////////////////////////////////////////////////////////
    
ВЫБРАТЬ
    Подзапрос.ЛицевойСчет,
    СУММА(Подзапрос.СальдоНачальное) КАК СальдоНачальное,
    СУММА(Подзапрос.СальдоКонечное) КАК СальдоКонечное,
    СУММА(Подзапрос.Начисления) КАК Начисления,
    СУММА(Подзапрос.Оплата) КАК Оплата
ПОМЕСТИТЬ Расчеты
ИЗ
    
(ВЫБРАТЬ
    РасчетыСАбонентамиОстатки.ЛицевойСчет КАК ЛицевойСчет,
    РасчетыСАбонентамиОстатки.СуммаОстаток КАК СальдоНачальное,
    0 КАК СальдоКонечное,
    0 КАК Начисления,
    0 КАК Оплата
ИЗ
    РегистрНакопления.РасчетыСАбонентами.Остатки(
            &НачалоПериода,
            ЛицевойСчет В
                (ВЫБРАТЬ
                    СписокЛС.ЛицевойСчет
                ИЗ
                    СписокЛС КАК СписокЛС)) КАК РасчетыСАбонентамиОстатки

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    РасчетыСАбонентамиОстатки.ЛицевойСчет,
    0,
    РасчетыСАбонентамиОстатки.СуммаОстаток,
    0,
    0
ИЗ
    РегистрНакопления.РасчетыСАбонентами.Остатки(
            ДОБАВИТЬКДАТЕ(&ОкончаниеПериода, СЕКУНДА, 1),
            ЛицевойСчет В
                (ВЫБРАТЬ
                    СписокЛС.ЛицевойСчет
                ИЗ
                    СписокЛС КАК СписокЛС)) КАК РасчетыСАбонентамиОстатки

    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        НачисленияАбонентскойПлатыОбороты.ЛицевойСчет,
        0,
        0,
        НачисленияАбонентскойПлатыОбороты.СуммаОборот,
        0
    ИЗ
        РегистрНакопления.НачисленияАбонентскойПлаты.Обороты(
                &НачалоПериода,
                &ОкончаниеПериода,
                Период,
                ЛицевойСчет В
                    (ВЫБРАТЬ
                    СписокЛС.ЛицевойСчет
                ИЗ
                    СписокЛС КАК СписокЛС)) КАК НачисленияАбонентскойПлатыОбороты
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        РасчетыСАбонентамиОбороты.ЛицевойСчет,
        0,
        0,
        0,
        РасчетыСАбонентамиОбороты.СуммаРасход
    ИЗ
        СписокЛС КАК СписокЛС
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РасчетыСАбонентами.Обороты(
                    &НачалоПериода,
                    &ОкончаниеПериода,
                    Период,
                    ЛицевойСчет В
                        (ВЫБРАТЬ
                    СписокЛС.ЛицевойСчет
                ИЗ
                    СписокЛС КАК СписокЛС)) КАК РасчетыСАбонентамиОбороты
            ПО СписокЛС.ЛицевойСчет = РасчетыСАбонентамиОбороты.ЛицевойСчет) КАК Подзапрос
            
    СГРУППИРОВАТЬ ПО
    Подзапрос.ЛицевойСчет
1 RomaH
 
naïve
23.12.21
06:52
Который из пяти?
2 DimVad
 
23.12.21
06:54
РегистрНакопления.РасчетыСАбонентами.Обороты я таки запихнул бы предварительно в вт.
Ну и от подзапроса тоже бы избавился (в вт его).

По всем полям где связки - индексы с обеих сторон.
3 ASU_Diamond
 
23.12.21
06:57
Избавиться от вложенных запросов
4 bolder
 
23.12.21
06:59
(0) А первый запрос не тормозит?Получение информации через документы - не рекомендуется.Индексы ВТотсутствуют.Вложенные запросы здесь - анахронизм.
5 seevkik
 
23.12.21
07:00
Проиндексировать, попробовать вместо подзапросов соединения
6 НоваяВолна
 
23.12.21
07:10
(4) первый к сожалению переписать не получится... конфигурация самописная, сделана до меня и не пишет Документ.Событие в регистры
7 НоваяВолна
 
23.12.21
07:11
(6) + но в принципе первый запрос не тормозит 2-3 секунды, хотя документов  почти 6 млн. Но в принципе период не больше месяца
8 RomaH
 
naïve
23.12.21
07:16
(7) почему информацию надо тянуть клещами?
разложи все на минимальные составляющие - и дай картинку - что сколько выполняется , объемы таблиц получившихся

Запрос.МенеджерВременныхТаблиц = Новый

Запрос.Текст = ... поместить вт1

Запрос.Выполнить();

Запрос.Текст = ... поместиь вт2

Запрос.Выполнить()

...
9 Ryzeman
 
23.12.21
07:25
(8) Да достаточно в консоли с замером по кускам выполнить. Ну или с таймером на телефоне, если в консоли встроенного нет.

(0) в первом запросе я б явное внутреннее соединение сделал, когда так через точку фигачишь некоторые СУБД вроде левое строят... Но это не точно.
Ну и проиндексировать эту ВТ надо.

И, как писали почти все тут - выкидывать вложенные запросы в ВТ. Должно помочь.
10 НоваяВолна
 
23.12.21
07:42
(8) не совсем понял про МенеджерВременныхТаблиц у меня задача построить отчет СКД. Как я туда воткну МенеджерВременныхТаблиц ? Что я не знаю в этом?
11 НоваяВолна
 
23.12.21
07:43
(9) во!!! про индекс это да!!! Надо
12 Галахад
 
гуру
23.12.21
07:45
Не понял зачем в запросах по оборотам периодичность, если потом идет группировка.
Не понял почему запрос начисления и оплаты не один а два. Еще и разные.
13 НоваяВолна
 
23.12.21
07:46
Как эксперимент вот этот кусок запроса

ВЫБРАТЬ
        НачисленияАбонентскойПлатыОбороты.ЛицевойСчет,
        0,
        0,
        НачисленияАбонентскойПлатыОбороты.СуммаОборот,
        0
    ИЗ
        РегистрНакопления.НачисленияАбонентскойПлаты.Обороты(
                &НачалоПериода,
                &ОкончаниеПериода,
                Период,
                ЛицевойСчет В
                    (ВЫБРАТЬ
                    СписокЛС.ЛицевойСчет
                ИЗ
                    СписокЛС КАК СписокЛС)) КАК НачисленияАбонентскойПлатыОбороты

Если как параметр ВТ поставить Авто вместо период производительность будет лучше? Спрашиваю теоретически, на практике проверю....
14 НоваяВолна
 
23.12.21
07:47
(12) вот тут поймал ))) как раз в (13) об этом пишу
15 Галахад
 
гуру
23.12.21
07:49
(14) Ну, убери и проверь.
16 НоваяВолна
 
23.12.21
07:49
(12) а ведь и правда!!! запрос оплаты - полный бред)))) спс
17 НоваяВолна
 
23.12.21
07:53
(12) Реально спс.... вот что значит свежий взгляд.... сам не заметил какой бред скопипасил из другого запроса
18 Ёпрст
 
23.12.21
09:46
(0) выкинуть все подзапросы и открыть для себя вт останки и обороты.
19 Dmitrii
 
гуру
23.12.21
10:43
+ к (18). Я вот тоже никак в толк взять не могу - нафига тут аж четыре подзапроса в объединении, когда есть таблица ОстаткиИОбороты. Которая сразу выдаст все данные и сама их агрегирует (сгруппирует).
20 H A D G E H O G s
 
23.12.21
11:11
Ну что там, автор, залетало?
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.