|
Оптимизация запроса, долго работает | ☑ | ||
---|---|---|---|---|
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
|
Ну что там, автор, залетало?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |