|
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
|
||||
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) И толстую книжку "Профразработка" тоже попробуй.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |