Имя: Пароль:
1C
1С v8
Запрос с параметрами виртуальной таблицы
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) я про тоже, нет агрегатов нигде в типовых, это уж кому надо - тот и делает