|
Оптимизация запроса | ☑ | ||
---|---|---|---|---|
0
BujiMuji
06.11.12
✎
14:09
|
есть РегистрНакопления.УстановкаСчетчик каждый месяц довабляется 9 000 000 запись
надо оптимизировать этот код ВЫБРАТЬ КОЛИЧЕСТВО(АбонентА), СУММА(Минут) КАК Минут ИЗ РегистрНакопления.УстановкаСчетчик ГДЕ Период МЕЖДУ &Дата1 И &Дата2 И Минут МЕЖДУ 0 И 60 на это уйдёт 21 сек |
|||
1
Feanorko
06.11.12
✎
14:10
|
Обращайтесь к виртуальной таблице регистра
|
|||
2
prog01
06.11.12
✎
14:11
|
(0)индексы и прямой запрос
|
|||
3
Maxus43
06.11.12
✎
14:12
|
(2) сгинь 7-шник и нарушитель лицензионного соглашения :)
|
|||
4
BujiMuji
06.11.12
✎
14:12
|
Feanorko можно какой нибудь пример?
|
|||
5
zladenuw
06.11.12
✎
14:13
|
какой пример. открываешь консоль запросов. и там смотришь. кроме этой таблицы, есть еще Остатки и Обороты. тебе походу Обороты
|
|||
6
Feanorko
06.11.12
✎
14:14
|
(4) сфорумилруйте задачу как-то полнее, а то я нихрена не понял, что нужно получить в итоге :)
|
|||
7
DexterMorgan
06.11.12
✎
14:15
|
(5) Как условие наложить в вирт таблице И Минут МЕЖДУ 0 И 60 (как я понял это ресурс)
|
|||
8
Feanorko
06.11.12
✎
14:16
|
(7) нужно как-то иначе спроектировать регистр, видимо
|
|||
9
BujiMuji
06.11.12
✎
14:17
|
ВЫБРАТЬ
КОЛИЧЕСТВО(АбонентА), СУММА(Минут) КАК Минут ИЗ РегистрНакопления.УстановкаСчетчик.Обороты(&Дата1,&Дата2) ГДЕ Минут МЕЖДУ 0 И 60 на этом уйдёт 33 сек |
|||
10
Feanorko
06.11.12
✎
14:17
|
(9) русским языком можешь объяснить, чего хочешь этим запросом плоучить?
|
|||
11
DexterMorgan
06.11.12
✎
14:18
|
(9) у тебя с (0) разный результат будет в общем случае
|
|||
12
zladenuw
06.11.12
✎
14:19
|
ты хочешь за 1 секунду получать ? или какой минимум.
|
|||
13
bodik911
06.11.12
✎
14:23
|
B Что значит это 33 21 ?
Какой MSSQL проц и тд на чем выполняете ? Может стоит туда смотреть |
|||
14
Feanorko
06.11.12
✎
14:25
|
(13) т.е. обращение к физической таблице регистра накопления нисколько не смущает? :)
|
|||
15
bodik911
06.11.12
✎
14:26
|
Да к виртуальной нужно
|
|||
16
BujiMuji
06.11.12
✎
15:15
|
||||
17
BujiMuji
06.11.12
✎
15:17
|
(12)
минимум нужен 0,020 сек |
|||
18
Serginio1
06.11.12
✎
15:18
|
А сколько у тебя вообще обонентов без условия на минуты?
И вся база в памяти умещается? |
|||
19
BujiMuji
06.11.12
✎
15:21
|
||||
20
Maxus43
06.11.12
✎
15:21
|
а период то какой хоть? за год поди смотриш
|
|||
21
BujiMuji
06.11.12
✎
15:22
|
(20) за месяц
|
|||
22
Rovan
гуру
06.11.12
✎
15:24
|
(19) делай пакетом: 1я выборка в запросе - это сумма минут в разрезе клиентов, а потом идут выборки из нее - с условиями интервалов значенений
|
|||
23
МихаилМ
06.11.12
✎
15:25
|
full scan detected.
-> чем больше данных, тем дольше испольнение запроса. где группировки в запросе? какие измерения регистра? какие поля дополнительно проиндексированны? |
|||
24
BujiMuji
06.11.12
✎
15:27
|
||||
25
BujiMuji
06.11.12
✎
15:28
|
(23) зачем группировака?
|
|||
26
Rovan
гуру
06.11.12
✎
15:30
|
(24) офигеть !
|
|||
27
Ёпрст
06.11.12
✎
15:32
|
(24) зачетные измерения.. чего уж там
Странно, что вообще что-то еще работает |
|||
28
МихаилМ
06.11.12
✎
15:36
|
(24)
это аналитический запрос. даже если перенести измерение "минут" после даты скорость выборки принципиально не увеличится ну в 2-3 раза. |
|||
29
Serginio1
06.11.12
✎
15:38
|
(27) С такими измерениямиэто проблема со вставкой связанная с индексом. Для ускорения можно в реквизиты добавить
Часы добавить |
|||
30
МихаилМ
06.11.12
✎
15:43
|
(25)
группировка или различные нужны тк КОЛИЧЕСТВО(АбонентА) - бессмысленно. |
|||
31
unregistered
06.11.12
✎
15:43
|
(24) А что означают измерения "Дата" и "Время" в твоём регистре? Какова их суть?
|
|||
32
Maxus43
06.11.12
✎
15:46
|
Индексы в РН по измерениям формируются тока если стоит галка Индексировать у них, а т.к. тип примитивный - нет индекса
|
|||
33
Feanorko
06.11.12
✎
15:47
|
Надеюсь, РН хотя бы оборотный?
|
|||
34
Maxus43
06.11.12
✎
15:50
|
часы и т.д. не в ресурс ли надо по логике то? и считать их быстро будет
|
|||
35
Ёпрст
06.11.12
✎
15:56
|
(33) нет конечно - "Агрегаты" не активен на скриншоте..
у него останковый.. и Это полный ПЭ.. не закрывается он никогда |
|||
36
Serginio1
06.11.12
✎
15:57
|
(32) Но длина индекса увеличивается в количеством и длиной измерения, что ведет к замедлению вставки в индекс, т.к. на одной странице размещается меньшее количество индексов, что ведет к бОльшей высоте Б+ дерева, и соответственно издержки на вставку. Ну и при чтении даже если все находится в памяти не будет эффекта от DDR памяти.
|
|||
37
Feanorko
06.11.12
✎
15:58
|
(35) убиццо тапком просто...
|
|||
38
Maxus43
06.11.12
✎
15:58
|
резюме - проетировка регистра *авно, перепроектировать саму суть этого всего что б там не было
|
|||
39
DexterMorgan
06.11.12
✎
15:59
|
(24) Сорри за оффтоп какой тип у измерения "Что"? Любопытно.
|
|||
40
ERWINS
06.11.12
✎
16:04
|
ВЫБРАТЬ
СУММА(выбор когда счетчик.Минут<=60 тогда счетчик.минут иначе 0) КАК Минут ИЗ РегистрНакопления.УстановкаСчетчик как счетчик ГДЕ Период МЕЖДУ &Дата1 И &Дата2 |
|||
41
Feanorko
06.11.12
✎
16:07
|
(40) это мёртвому припарка
|
|||
42
Serginio1
06.11.12
✎
16:18
|
(0) А какой смысл от такого регистра? Зачем нужно накапливать именно по таким измерениям. Просто большая часть может легко выведена в ревкизиты. У тебя база наверное пухнет и выборка так долго потому, что вся база в памяти не помещается и идет медленное обращение к диску.
|
|||
43
alexhtn
06.11.12
✎
16:33
|
(0) Сделай справочник Интервалы с полями "от" и "до"
И потом весь отчет можно получить одним запросом ВЫБРАТЬ УстановкаСчетчик.АбонентА, УстановкаСчетчик.Минут, Интервалы.Ссылка КАК Интервал ПОМЕСТИТЬ Данные ИЗ РегистрНакопления.УстановкаСчетчик КАК УстановкаСчетчик ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Интервалы КАК Интервалы ПО УстановкаСчетчик.Минут >= Интервалы.От И УстановкаСчетчик.Минут < Интервалы.До ИНДЕКСИРОВАТЬ ПО Интервал ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Данные.АбонентА) КАК АбонентА, СУММА(Данные.Минут) КАК Минут, Данные.Интервал ИЗ Данные КАК Данные СГРУППИРОВАТЬ ПО Данные.Интервал УПОРЯДОЧИТЬ ПО Данные.Интервал.От |
|||
44
Maxus43
06.11.12
✎
16:40
|
(43) + такой принцип заложен в том же РАУЗе, что сильно ускоряет все телодвижения с регистром с кучей аналитики
|
|||
45
ERWINS
06.11.12
✎
16:43
|
(41) записей 9 млн... скорей всего проблема с не вырным выбором индексов в запросе
|
|||
46
Maxus43
06.11.12
✎
16:45
|
(45) это потому что структура регистра не позволяет впринципе строить нормальные индексы
|
|||
47
Feanorko
06.11.12
✎
16:51
|
(46) да там хотя бы сделать регистр оборотным и условие засунуть в параметры ВТ - уже легче было бы.
|
|||
48
Feanorko
06.11.12
✎
16:51
|
+(47) ну и ресурс добавить соотв
|
|||
49
Maxus43
06.11.12
✎
16:51
|
примитивные типы выкинуть из измерений ещё бы
|
|||
50
ERWINS
06.11.12
✎
16:52
|
(47) так он должен работать без индексов для скорости
сканинг... всего 9 млн |
|||
51
Maxus43
06.11.12
✎
16:55
|
обновлкение статистики может вобще ускорит в разок эту байду, хз чо там со скулем. иль файловая вобще?
|
|||
52
МихаилМ
06.11.12
✎
16:55
|
(49)
даже полный дибилизм измерение "минут" число 10.0 (9 байт) эффективней для построения индекса чем тип ссылка (16 байт) |
|||
53
Feanorko
06.11.12
✎
16:56
|
(52) ссылка разве не 36 символов?
|
|||
54
Maxus43
06.11.12
✎
16:57
|
(52) по примитивным типам в РН индексы не строит вобще, ибо так гласит толстая библия 1с. Сам не смотрел правда, но всегда полагал что примитивные типы зло в измерениях
|
|||
55
МихаилМ
06.11.12
✎
16:58
|
(53)
путаете представление гуида и значение. |
|||
56
Feanorko
06.11.12
✎
16:59
|
(55) можно на примере?
|
|||
57
Reset
06.11.12
✎
17:00
|
(56) Число 100 - 1 байт
Его представление "100" - три символа |
|||
58
Feanorko
06.11.12
✎
17:00
|
(57) применительно к гуиду и его представлению
|
|||
59
Reset
06.11.12
✎
17:02
|
(58) аналогично. guid - 16 байт.
Его представление в шестнадцатерично виде и с разделителями - 36 символов |
|||
60
Feanorko
06.11.12
✎
17:03
|
(59) пример можно? гуида и его представления
|
|||
61
Maxus43
06.11.12
✎
17:03
|
индексы РН:
обязательные: Период + Регистратор + НомерСтроки Регистратор + НомерСтроки Измерение + Регистратор + НомерСтроки в том случае если у измерения стоит галка индексировать Реквизит + Регистратор + НомерСтроки в том случае если у реквизита стоит галка индексировать Как я понимаю - примитивные типы вобще не участвуют в построении индексов |
|||
62
Feanorko
06.11.12
✎
17:04
|
(61) это про физическую таблицу РН
|
|||
63
Reset
06.11.12
✎
17:05
|
(60) Блин ну как в (57) только в 16 раз длиннее. Очевидно же
|
|||
64
Feanorko
06.11.12
✎
17:05
|
+(62) и тут ничего не сказано про то, что платформе пофиг на "Индексировать" у измерения примитивного типа
|
|||
65
Maxus43
06.11.12
✎
17:06
|
ааа, затупил с примитивными. всё норм, строится если надо
|
|||
66
КуплюКровать
06.11.12
✎
17:07
|
(24)регистр кривой
|
|||
67
Maxus43
06.11.12
✎
17:09
|
(65) + только до сих пор не понял зачем это в Измерение. Зачем в разрезе Минут вести учёт? Смысла не видно, да и никогда не закроется
|
|||
68
Feanorko
06.11.12
✎
17:11
|
(63) понял) спасибо)
|
|||
69
Feanorko
06.11.12
✎
17:11
|
(67) регистр по смыслу не должен быть остаточным, он и не должен закрываться
|
|||
70
Maxus43
06.11.12
✎
17:12
|
(69) тут то остаточный)
|
|||
71
Feanorko
06.11.12
✎
17:13
|
(70) вроде как очевидно, что это косяк :)
|
|||
72
BujiMuji
07.11.12
✎
11:50
|
Ура получилось
(43) Спасибо http://img.uz/s?j27hcoj Код: ВЫБРАТЬ УстановкаСчетчик.АбонентА, УстановкаСчетчик.Минут, Интервалы.Ссылка КАК Интервал ПОМЕСТИТЬ Данные ИЗ РегистрНакопления.УстановкаСчетчик КАК УстановкаСчетчик ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Интервалы КАК Интервалы ПО УстановкаСчетчик.Минут >= Интервалы.От И УстановкаСчетчик.Минут < Интервалы.До ГДЕ УстановкаСчетчик.Период МЕЖДУ &Дата1 И &Дата2 И УстановкаСчетчик.Тип = "Юр" ИНДЕКСИРОВАТЬ ПО Интервал ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Данные.АбонентА) КАК АбонентА, СУММА(Данные.Минут) КАК Минут, Данные.Интервал ИЗ Данные КАК Данные СГРУППИРОВАТЬ ПО Данные.Интервал УПОРЯДОЧИТЬ ПО Данные.Интервал.От |
|||
73
BujiMuji
07.11.12
✎
11:51
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |