|
В ИЕРАРХИИ в виртуальных таблицах | ☑ | ||
---|---|---|---|---|
0
Бешеная Нога
03.12.13
✎
11:46
|
при подготовке к эксперту нашел "материал", что "В ИЕРАРХИИ" в виртуальных таблицах - зло. ибо тот запрос который формируется для выполнения условия "В ИЕРАРХИИ" ни разу не оптимальный.
и вроде как правильно сначала получить таблицу элементов из иерархии, а уже потом ее использовать в качестве отбора. есть запросы ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки(&ТекущийПериод, Счет В ИЕРАРХИИ (&Счета), , Организация = &Организация) и |ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки( | &ТекущийПериод, | Счет В | (ВЫБРАТЬ | ТаблицаСчетов.Счет | ИЗ | ТаблицаСчетов КАК ТаблицаСчетов), | , | Организация = &Организация) КАК БУ_Текущий где таблица счетов получается предварительно: "ВЫБРАТЬ | Хозрасчетный.Ссылка КАК Счет |ПОМЕСТИТЬ ТаблицаСчетов |ИЗ | ПланСчетов.Хозрасчетный КАК Хозрасчетный |ГДЕ | Хозрасчетный.Ссылка В ИЕРАРХИИ(&Счета) | |ИНДЕКСИРОВАТЬ ПО | Счет |; замер производительности показывает однинаковые 30 секунд выполнения (второй на 0,15 сек быстрее). значит фигня про "в иерархии"? |
|||
1
unregistered
03.12.13
✎
11:51
|
(0) Относительно регистра бухгалтерии - фигня.
Таблица плана счетов в 99,99% случаев достаточно маленькая. Если бы речь шла об иерархическом справочнике с приличным количеством элементов, то возможно(!) разница была бы более значительной. |
|||
2
unregistered
03.12.13
✎
11:52
|
+ к (1) поэксперементируй с условиями на значения субконто, например, Номенклатура или Контрагенты (смотря какой справочник поболе).
|
|||
3
Sabbath
03.12.13
✎
11:53
|
(0) а ты попробуй на большем объеме данных (в смысле больше элементов внутри группы) и большей вложенности
|
|||
4
Бешеная Нога
03.12.13
✎
11:57
|
(2) (3) возможно вы и правы. т.е. во втором случае получается "правильный запрос" но выхлопа особо не дает, так как данных относительно мало...
|
|||
5
unregistered
03.12.13
✎
12:01
|
(4) Запрос правильный и там и там.
Вопрос только в выигрыше (будет ли он?). На выполнение запроса для отдельного получения таблицы счетов тоже уходит время и накладные расходы на получение результата этого запроса с последующей передачей этого результата обратно на сервер СУБД в качестве параметра основного запроса. Если уж идти по такому (второму) пути, то может целесообразнее пакет запросов делать, чтобы не гонять данные туда-сюда между серверами СУБД и 1С. |
|||
6
hhhh
03.12.13
✎
12:09
|
(4) это же элементарно, Ватсон. Во втором запросе используется кеш от первого запроса.
Попробуйте перезагрузить комп для верности, и потом запустить второй запрос, а за ним первый. И секунды нам выложите. |
|||
7
WildSery
03.12.13
✎
14:14
|
(5) Просветите, пожалуйста, пакетный запрос выполняется не на сервере СУБД, а гоняется туда-сюда по частям?
|
|||
8
Rovan
гуру
03.12.13
✎
14:16
|
(7) нет...на сервере
|
|||
9
Fragster
модератор
03.12.13
✎
14:22
|
&Счета - это группа счетов-то хоть?
|
|||
10
Fragster
модератор
03.12.13
✎
14:23
|
а еще лучше - список групп счетов
|
|||
11
Fragster
модератор
03.12.13
✎
14:24
|
еще есть чит, который иногда срабатывает (не всегда, надо проводить замер на реальных данных):
(Счет, Истина) В | (ВЫБРАТЬ | ТаблицаСчетов.Счет, Истина | ИЗ | ТаблицаСчетов КАК ТаблицаСчетов) |
|||
12
H A D G E H O G s
03.12.13
✎
14:24
|
(0) Ты - эксперт? Бугага.
|
|||
13
Бешеная Нога
03.12.13
✎
15:06
|
(10) список групп счетов и счетов )
(11) да точно, ты уже как то про него говорил, тогда реально сработало ))) попробую применить ) |
|||
14
Бешеная Нога
03.12.13
✎
15:06
|
(12) давай. разбей меня в пух и прах своими знаниями.
|
|||
15
Бешеная Нога
03.12.13
✎
15:08
|
(12) в какое соединение выльеться в итоге (в иерархии) в виртуальной таблице?
|
|||
16
Бешеная Нога
03.12.13
✎
15:10
|
выльется
|
|||
17
John83
04.12.13
✎
10:52
|
(11) а в чем прикол?
|
|||
18
Бешеная Нога
05.12.13
✎
13:46
|
(11) в данному случае дало прирост 1с секунду ) все равно запросы почти одинакого выполняются...
|
|||
19
Sammo
05.12.13
✎
13:49
|
В некоторых случаях у меня (несмотря на рекомендации 1с) Где и join отрабатывали быстрее, чем условие на виртуальную таблицу. Но это в РН. По Бухии не готов сказать
|
|||
20
Sammo
05.12.13
✎
13:50
|
(17) В скуле получается не in(), а exists(), а он работает шустрее
|
|||
21
Бешеная Нога
05.12.13
✎
13:52
|
сейчас тесты.
|
|||
22
Бешеная Нога
05.12.13
✎
13:53
|
запрос в иерархии по регистру бухгалтерии - 47сек
запрос в (таблица, с доп полем истина) по регистру бухгалтерии - 46 секунд запрос без условия по регистру бухгалтерии - 36 секунд |
|||
23
Fragster
модератор
05.12.13
✎
14:01
|
(22) еще сделай тест - 1 запрос - выгрузка счетов в массив, 2 - отбор по параметру-массиву
|
|||
24
Бешеная Нога
05.12.13
✎
14:02
|
(23) т.е. в параметр виртуальной таблицы сунуть В (&Массив)?
|
|||
25
mikecool
05.12.13
✎
14:03
|
(20) фигассе... вот это писатели движка )))
|
|||
26
Бешеная Нога
05.12.13
✎
14:22
|
хотя при любом раскладе выигрыш будет максимум 10 секунд из 47... так что...
|
|||
27
samozvanec
05.12.13
✎
15:14
|
(26) так то четверть...
|
|||
28
WildSery
05.12.13
✎
15:39
|
(19) left join никак не может быстрее отрабатывать, чем exists.
|
|||
29
WildSery
05.12.13
✎
15:40
|
Тьфу, наоборот.
|
|||
30
H A D G E H O G s
05.12.13
✎
15:46
|
1) Выбрать 1 запросом все счета из иерархии, если так нетерпиться.
2) Обойти кодом счета, получить всевозможные типы субконто. 3) Захерачить в 1 массив счета, в 2 массив - субконто. 4) Запросить остатки. Другой вопрос, если счетов 100500, тут так делать не надо. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |