Вход | Регистрация
 

Оптимизация запроса, долго работает

Оптимизация запроса, долго работает
Я
   НоваяВолна
 
23.12.21 - 06:32
Собственно сабж и сам запрос


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

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

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

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

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

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

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

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

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

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

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

...
   Ryzeman
 
9 - 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) выкинуть все подзапросы и открыть для себя вт останки и обороты.
   Dmitrii
 
19 - 23.12.21 - 10:43
+ к (18). Я вот тоже никак в толк взять не могу - нафига тут аж четыре подзапроса в объединении, когда есть таблица ОстаткиИОбороты. Которая сразу выдаст все данные и сама их агрегирует (сгруппирует).
   H A D G E H O G s
 
20 - 23.12.21 - 11:11
Ну что там, автор, залетало?

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.