Имя: Пароль:
1C
1С v8
8.3 перенёс ГДЕ в аргументы виртуальных таблиц и отчет замедлился :(
0 Matrix1C
 
04.02.17
14:55
Здравствуйте.
Я написал отчет где многократно использовались два вида запросов.
К регистру оборотов (за месячными оборотами) и к регистру сведений(за  суммами плана на нужный месяц).
Отчет выпонялся очень медленно, узнав что гораздо правильнее использовать виртуальные таблицы, я переписал запросы внеся все условия из ГДЕ в параметры функций этих виртуальных таблиц регистров.
Вопрос, а должны ли они работать быстрее ?
Запрос к регистру оборотов ускорился на 20% (мало конечно), а вот запрос к виртуальной таблице СрезПоследних замедлился на 80%.
База файловая.
1 Torquader
 
04.02.17
15:00
А как эти запросы выглядят ?
Просто, возможна ситуация, когда отбор для формирования виртуальной таблицы будет идти дольше, чем анализ итоговой выборки (особенно, если последняя не такая уж и большая).
2 organizm
 
04.02.17
15:05
может стоит в СрезПоследних еще запихать отборы из данных Оборотов, а потом все соединить?
3 piter3
 
04.02.17
15:13
текст запросов?обслуживание?типовое или самописки
4 PR
 
04.02.17
15:20
(0) Только _ни в коем случае_ не вздумай постить сюда текст запроса!
5 Matrix1C
 
04.02.17
15:33
Мне интересно, такая "оптимизация" (отказ от ГДЕ) обязана ускорять не SQL базу?

Когда я ещё писал ГДЕ я не знал что отбор будет осуществляться после выборки. И до сих пор не понимаю важно это или нет?
Тексты сейчас попробую почистить и разместить.
6 Matrix1C
 
04.02.17
15:37
ВЫБРАТЬ
   План.Клуб КАК Клуб,
   План.Вид КАК Вид,
   План.Сумма КАК Сумма,
   План.Период КАК Период
ИЗ   РегистрСведений.План.СрезПоследних(&ВыбКон,(Вид В ИЕРАРХИИ(&ВыбВид)) И (Клуб=&Клуб)) КАК План
ИТОГИ  СУММА(Сумма) ПО ОБЩИЕ
7 Torquader
 
04.02.17
15:39
(6) В ИЕРАРХИИ выкинуть из временной таблицы в ГДЕ - должно быть быстрее.
8 Matrix1C
 
04.02.17
15:41
А вот старый

"ВЫБРАТЬ
|   План.Клуб КАК Клуб,
|   План.Вид КАК Вид,
|   План.Сумма КАК Сумма,
|   План.Период КАК Период
|ИЗ РегистрСведений.План КАК План
|ГДЕ
|   Вид В ИЕРАРХИИ(&ВыбВид) И Период>=&ВыбНач И Период<=&ВыбКон
| И &ВыбКлуб=Клуб
| И Клуб.НеВключатьВОбщийОтчет=Ложь    
|ИТОГИ  СУММА(Сумма) ПО ОБЩИЕ"
9 Matrix1C
 
04.02.17
15:42
(7) выкинуть В ИЕРАРХИИ означает перенести его в ГДЕ?
10 MishaD
 
04.02.17
16:03
Запросы то разные. В новом выбор из среза последних, а в старом из самого регистра.
11 Matrix1C
 
04.02.17
16:08
(10) В старом из регистра а вновом из его виртуальной таблицы.
Везде где я про это читал обещали увеличение быстродействия. так как в  новом запросе нет ГДЕ.
12 H A D G E H O G s
 
04.02.17
16:10
(11) Это разные по логике запросы.
13 H A D G E H O G s
 
04.02.17
16:10
СрезПоследних() СрезПервых() не ускоряет выполнения запросов. Он меняет логику.
14 PR
 
04.02.17
16:17
(13) Сейчас уже возможно ускоряет, раз агрегаты появились
15 Matrix1C
 
04.02.17
16:19
(12) не знаю что мне даёт знание о разной логике.

Дело не в логике а в скорости выполнения.
В разных источниках утверждается что наличие условий в ГДЕ вызывает замедление так как сперва делается полная выборка а затем из неё выбирается по условию.
А если эти условия поместить в виртуальные таблицы то будто бы изначально выборка уже будет оптимальна (условие уже будет на неё наложено в процессе самой выборки)
К сожалению не очень понимаю о чем пишу, просто пытаюсь передать смысл статей в которых я читал про неправильность использования ГДЕ в запросах.
16 H A D G E H O G s
 
04.02.17
16:20
(14) Итоги, Роман, итоги. И то только при оперативном срезе.
17 PR
 
04.02.17
16:20
(15) А тебя не смущает, что это пишется про все регистры, _кроме_ регистров сведений?
18 PR
 
04.02.17
16:21
(16) Не буду спорить, но и верить на слово не буду, трэба проверить :))
19 H A D G E H O G s
 
04.02.17
16:22
(15) У тебя стаж - 12 лет на форуме, но по ощущениям тебя держали в подвале крупного Московского франча.
20 Matrix1C
 
04.02.17
16:24
(17) согласен я читал про регистр оборотов.
Но переписанный мной запрос дал менее 20% прироста производительности.
Хотя по логике этих статей я избавлялся от огромной части выборки использую Виртуальную таблицу Оборотов по месяцам.
Чем сам регистр и через ГДЕ отбор нужного месяца.
Что странно.
21 H A D G E H O G s
 
04.02.17
16:25
(20) ну может ты и там дичь написал.
22 Matrix1C
 
04.02.17
16:25
(17) в (20) я имел ввиду что я пробовал убрать ГДЕ и из запроса по регистру ооротов
23 Torquader
 
04.02.17
16:28
В срез последних выбирается всё, что было до определённого момента. В старом запросе - выбиралось всё, что было в периоде.

Ещё вопрос - а таблицы "срез первых и срез последних" вообще у этого регистра включены ? Просто, если нет, то он их строит каждый раз перед запросом.
24 Matrix1C
 
04.02.17
16:29
(21) а что тут дикого.

Там также был запрос к
|ИЗ   РегистрНакопления.ДеньгиПоВиду КАК ДПВ
|ГДЕ

И КУЧА ГДЕ
А стал

|ИЗ  РегистрНакопления.ДеньгиПоВиду.Обороты( &ВыбНач, &ВыбКон,Месяц,&ВыбКлуб=Клуб )  КАК ДПВ";

ГДЕ полностью переехал в параметры функции
25 Matrix1C
 
04.02.17
16:31
(23) К сожалению когда я поставил в конфигураторе галочку (разрешить срез последних) по скорости ничего не изменилось.Может надо их гдето ещё сгенерировать?

А когда индексировал по двум измерениям (до этого было без инлексации) отчет ускорился.
26 mistеr
 
04.02.17
16:32
(22) Прежде, чем всерьез обсуждать производительность запросов, необходимо помимо самих запросов, привести полностью структуру регистров, индексы и объемы данных.
27 youalex
 
04.02.17
16:32
(20) *Виртуальную таблицу Оборотов
Хм, звучит...
28 Matrix1C
 
04.02.17
16:34
(23) Цитата
" В старом запросе - выбиралось всё, что было в периоде."

Я вот ещё к старому. Я читал что ГДЕ это фильтр уже после выборки. Поэтому я думал что в старом генерируется слишком много записей и уже из них идёт отбор.
А в срезе последних будут и так последние их по любому меньше.
29 Matrix1C
 
04.02.17
16:36
(27) не знаю в чем юмор но она вроде так называется вот к примеру
"Регистры накопления. Виртуальные таблицы. Часть №1: Обороты."
Это заголовок статьи.
30 piter3
 
04.02.17
16:37
ну не знаю,может динамику роста таблицы приведешь.пока не понятно в чем замещательство
31 H A D G E H O G s
 
04.02.17
16:37
(25) "по скорости ничего не изменилось"

У тебя дата воткнута в условие. Это работает только для актуального среза (на текущий момент, дата в параметр не ставится)
32 Matrix1C
 
04.02.17
16:39
(26)
Я ставил вопрос попроще.
Реально ли ускорение запроса если в файловой базе не использовать ГДЕ а использовать параметры виртуальных таблиц....
33 youalex
 
04.02.17
16:39
(29) это начало предложения. А у тебя - выглядит как имя собственное. впрочем, офф.
34 Matrix1C
 
04.02.17
16:41
(31) тут уже два вида запросов.
Если про то где срез
РегистрСведений.План.СрезПоследних(&ВыбКон,

ВыбКон это дата.
Так а куда ещё её, я считаю что именно в этот параметр и надо.
35 piter3
 
04.02.17
16:43
а период не поменяли случаем с дня на меньшее случаем)
36 Matrix1C
 
04.02.17
16:48
(35) В регистре сведений период месяц.
Может надо следить чтобы в параметр передавалось только первое число месяца?
37 Web00001
 
04.02.17
16:49
(15)Это дает понимание, что тебе не нужны виртуальные таблицы?
38 Torquader
 
04.02.17
16:49
А вообще - записи в РегистрСведений.План - у нас предполагаются на каждый день - то есть нас интересует кусок таблицы ?
Если так - то сначала отобрать все записи в периоде, которые нас интересуют с учётом применения индексов, а потом этот результат пропустить через В ИЕРАРХИИ, так как оно самое медленное - и, если это условие будет сразу в запросе, то он будет медленнее, чем без него.
39 Matrix1C
 
04.02.17
16:52
(38) Пожалуйста, помогите текстом.
На словах не понял как пропустить через В ИЕРАРХИИ

Раньше это в ГДЕ было. Вернуть в ГДЕ?
40 Matrix1C
 
04.02.17
16:53
(37) Я прочитал что виртуальные таблицы помогают избавится от ГДЕ и это даёт оптимизацию запроса.

Сами они мне не нужны, но без них от ГДЕ как избавится?
41 H A D G E H O G s
 
04.02.17
16:56
Я просто оставлю это здесь
https://youtu.be/2d9q4r54fco
42 Torquader
 
04.02.17
16:56
Избавится от ГДЕ в запросе - невозможно.
Просто, если мы делаем выборку из виртуальной таблицы (а не всегда она нам нужна), то нужно те условия, которые позволяют использовать индексы при формировании виртуальной таблицы, выносить в построение самой таблицы.
43 Matrix1C
 
04.02.17
16:58
(42) Где это "в построение самой таблицы?"
44 Torquader
 
04.02.17
17:01
(43) Построение самой таблицы - это условия в формировании виртуальной таблицы - в скобочках.

Хотя, вам, наверное лучше будет
ВЫБРАТЬ
...
ИЗ
(ВЫБРАТЬ ... Из РегистрСведений... ГДЕ Условия по индексам)
ГДЕ УсловияНаИерархию
45 Matrix1C
 
04.02.17
17:03
(44) ИЕРАРХИЮ вынесу и попробую. Спасибо.
и для сведений и для оборотов попробую.
46 H A D G E H O G s
 
04.02.17
17:04
(45) И толстую книжку "Профразработка" тоже попробуй.