![]() |
|
Запрос с параметрами виртуальной таблицы | ☑ | ||
---|---|---|---|---|
0
kible
22.11.12
✎
09:42
|
Добрый день! Почему запрос с параметрами виртуальной таблицы работает медленнее чем без параметров.
ВЫБРАТЬ ВзаиморасчетыОстаткиИОбороты.Период КАК ПериодМесяц, СУММА(ВзаиморасчетыОстаткиИОбороты.СуммаВзаиморасчетовНачальныйОстаток) КАК НачальноеСальдо, СУММА(НачисленияОбороты.СуммаОтопленияОборот) КАК НачисленоОтопление, СУММА(НачисленияОбороты.СуммаПодогреваОборот) КАК НачисленоПодогрев, СУММА(ПерерасчетыОбороты.СуммаОборот) КАК Перерасчет, СУММА(ОплатаОбороты.СуммаОборот) КАК Оплата, СУММА(ВзаиморасчетыОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток) КАК КонечноеСальдо ИЗ РегистрНакопления.Взаиморасчеты.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Месяц, , Адрес = &Адрес) КАК ВзаиморасчетыОстаткиИОбороты ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Начисления.Обороты(&ДатаНачала, &ДатаОкончания, Месяц, Адрес = &Адрес) КАК НачисленияОбороты ПО ВзаиморасчетыОстаткиИОбороты.Адрес = НачисленияОбороты.Адрес И ВзаиморасчетыОстаткиИОбороты.Период = НачисленияОбороты.Период ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Перерасчеты.Обороты(&ДатаНачала, &ДатаОкончания, Месяц, Адрес = &Адрес) КАК ПерерасчетыОбороты ПО ВзаиморасчетыОстаткиИОбороты.Адрес = ПерерасчетыОбороты.Адрес И ВзаиморасчетыОстаткиИОбороты.Период = ПерерасчетыОбороты.Период ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Оплата.Обороты(&ДатаНачала, &ДатаОкончания, Месяц, Адрес = &Адрес) КАК ОплатаОбороты ПО ВзаиморасчетыОстаткиИОбороты.Адрес = ОплатаОбороты.Адрес И ВзаиморасчетыОстаткиИОбороты.Период = ОплатаОбороты.Период СГРУППИРОВАТЬ ПО ВзаиморасчетыОстаткиИОбороты.Период Результат выполнения этого запроса 2,2 сек. Если убрать параметры "ДатаНачала" и "ДатаОкончания", тогда запрос выполнится за 1,1 сек. |
|||
1
Maxus43
22.11.12
✎
09:53
|
хз, возможно оптимизатор запросов не так отработал иль ещё чего. SQL?
|
|||
2
krbIso
22.11.12
✎
10:03
|
соединение с виртуальной таблицей
|
|||
3
lxndr
22.11.12
✎
10:06
|
значения ДатаНачала и ДатаОкончания?
|
|||
4
Maxus43
22.11.12
✎
10:07
|
и да, если даты - посреди месяца - то логично
|
|||
5
kible
22.11.12
✎
10:54
|
База файловая. Платформа 8.2.15. Даты не посреди месяца.
|
|||
6
mzelensky
22.11.12
✎
10:56
|
(0) попроуй сравнить без левых соединений! что покажет?
|
|||
7
Нуф-Нуф
22.11.12
✎
10:57
|
ужаснах
|
|||
8
Нуф-Нуф
22.11.12
✎
10:58
|
сделай 3 пакетных запроса к виртуальным таблицам, а уже их потом соединяй
|
|||
9
Нуф-Нуф
22.11.12
✎
10:58
|
и не забывай про индексирование
|
|||
10
Megas
22.11.12
✎
10:58
|
Это потому что без параметоров он берёт "Последние записи не парясь" с параметрами даты он делает "Срез на дату" что естественно дольше.
|
|||
11
mzelensky
22.11.12
✎
10:59
|
(0) кстати...вчитался в запрос....а нафига вот это:
РегистрНакопления.Взаиморасчеты.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Месяц, , Адрес = &Адрес) КАК ВзаиморасчетыОстаткиИОбороты ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Начисления.Обороты(&ДатаНачала, &ДатаОкончания, Месяц, Адрес = &Адрес) КАК НачисленияОбороты ПО ВзаиморасчетыОстаткиИОбороты.Адрес = НачисленияОбороты.Адрес И ВзаиморасчетыОстаткиИОбороты.Период = НачисленияОбороты.Период ??? |
|||
12
sadden
22.11.12
✎
10:59
|
поведения запросов при соединении таблиц в 8.2 вообще порой не поддаются пониманию - интересно, что покажет если сначала сделать пакетные запросы с выборкой этих таблиц с параметрами?
|
|||
13
Maxus43
22.11.12
✎
10:59
|
да там всё печально
|
|||
14
kible
22.11.12
✎
11:10
|
Сделал через пакетные запросы. Результат тот же.
|
|||
15
sanja26
22.11.12
✎
11:13
|
(0) так таблицы оборотов и остатков рассчитаны на дату актуальности, а с датами ты пересчитываешь
|
|||
16
sanja26
22.11.12
✎
11:14
|
(0) попробуй поставить дату начала - пустая дата. (0,0,0)
|
|||
17
Maxus43
22.11.12
✎
11:14
|
(15) по месяцам хранятся таблицы итогов же
|
|||
18
kible
22.11.12
✎
11:18
|
Если дата начала пустая, то запрос выполняется за 1,6 сек.
|
|||
19
sanja26
22.11.12
✎
11:19
|
еще дату окончания в дату актальности установить и получишь 1.1
|
|||
20
sanja26
22.11.12
✎
11:20
|
(17) а агрегаты зачем в регистрах?
|
|||
21
Maxus43
22.11.12
✎
11:20
|
(20) их в 8.1 небыло например, я про структуру хранения данных говорю
|
|||
22
mzelensky
22.11.12
✎
11:28
|
(20) а зачем?
|
|||
23
sanja26
22.11.12
✎
11:29
|
(21)http://v8.1c.ru/overview/Term_000000564.htm#1
у него даты кратных периодов скорее всего, т.е. начало и конец месяца к примеру |
|||
24
Maxus43
22.11.12
✎
11:40
|
(23) ты сначала узнай прописаны ли у автора агрегаты в регистрах, ибо 90% что нет.
Я же говорил о структуре хранения данных РН в СУБД, там таблицы итогов помесячно хранятся |
|||
25
Нуф-Нуф
22.11.12
✎
11:48
|
(14) покажи что сделал
|
|||
26
sanja26
22.11.12
✎
12:15
|
(24) посмотрел в типовой КА, для регистров остатков нигде не задаются агрегаты)
значит так влияет расчет срезов последних |
|||
27
Maxus43
22.11.12
✎
12:24
|
(26) я про тоже, нет агрегатов нигде в типовых, это уж кому надо - тот и делает
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |