Имя: Пароль:
1C
1С v8
Большая разница во времени выполнения одного запроса за разные периоды ☑
0 kalinin
 
06.06.16
✎
14:36
Приветствую!
Наткнулся на такую проблему: при выполнении запроса за разные периоды существенно различается время выполнения.

Запрос:

ВЫБРАТЬ
Номенклатура,
КоличествоОборот
ИЗ
РегистрНакопления.Продажи.Обороты(&д1,&д2,,Контрагент в ИЕРАРХИИ (&ГруппыКонтр))

Разница во времени выполнения между запросами с периодом 20.04.16-30.04.16 и с периодом 20.05.16-30.05.16 - в десятки раз.
Количество записей в таблице движений "Продажи" за оба периода примерно одинаковы.

Нашел разницу, которую видно в плане запроса при получении продаж: разница в количестве строк во временных таблицах контрагентов.

В обоих случаях формируется временная таблица, куда складываются контрагенты, попавшие в иерархию.
http://clip2net.com/s/3yT6QvH
На скриншоте показано факт. количество строк временной таблицы

http://clip2net.com/s/3yT7p8L
А на этом скрине видно (получение продаж за май), что, почему-то, во временной таблице уже не 4923 строки, а какие-то миллионы...

Таким образом:
При получении продаж за апрель во временной таблице 4923 контрагентов
При получении продаж за май во временной таблице миллионы контрагентов

Если в обоих случаях на последней итерации формирования временной таблицы контрагентов
количество строк 4923, то откуда берется такое количество контрагентов во временной таблице при получении продаж именно за 20.05.16-30.05.16?

P.S.: аналогичная ситуация, если делать отбор по номенклатуре.
1 mistеr
 
06.06.16
✎
14:39
(0) Может граница итогов съехала?
Разделения итогов часом нет на этом регистре?
2 kalinin
 
06.06.16
✎
17:03
(1) Так это же оборотный регистр.
Разделение на нем есть.
Но при получении продаж в данном случае в профайлире было видно, что используется таблица движений регистра.
3 Dmitrii
 
гуру
06.06.16
✎
17:16
Попробуйте переписать на вариант с получением списка контрагентов ДО выполнения запроса к регистру. Например:

ВЫБРАТЬ
  Ссылка
ПОМЕСТИТЬ ТабКонтрагенты
ИЗ
  Справочника.Контрагенты
ГДЕ
  Ссылка В ИЕРАРХИИ (&ГруппыКонтр)
  И НЕ Ссылка.ЭтоГруппа
ИНДЕКСИРОВАТЬ ПО
  Ссылка
;
/////////////////////////////////
ВЫБРАТЬ
  Номенклатура,
  КоличествоОборот
ИЗ
  РегистрНакопления.Продажи.Обороты(&д1,&д2,,Контрагент В (ВЫБРАТЬ Ссылка ИЗ ТабКонрагенты))
4 kalinin
 
06.06.16
✎
17:27
(3)
Да, это сразу проверил. В таком виде оба запроса выполняются одинаково быстро.
5 hhhh
 
06.06.16
✎
17:36
(4) попробуйте за месяц делеть. И по 31 мая, а не по 30е. Всё-таки апрель по конец месяца. а май по самому жесткому варианту.
6 kalinin
 
06.06.16
✎
17:59
(5)
У меня конечные даты в обоих вариантах были не на конец дня, т.е. оба варианта вроде как "жесткие" :)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший