О важности псевдонимов полей во временных таблицах и отборах на СКД для производительности

Программирование - Практика программирования

СКД

23
Рассмотрена важность правильного указания псевдонимов полей временных таблиц запроса СКД, на которые могут накладываться отборы

Сегодня рассмотрим одну из причин низкой производительности отчета на СКД. Связано это с правильностью назначения псевдонимов полей временных таблиц и использованием отборов.

Создадим запрос для демонстрации примера. Выберем ссылки контрагентов, поместим их во временную таблицу, а в итоговом запросе получим договоры контрагентов, связав их по владельцу из контрагентов временной таблицы. Такой запрос создан исключительно для демонстрации – просьба не давать комментарии по поводу правильности получения таких данных.

 

Как видно, псевдоним у поля временной таблицы не назначен.

А в итоговом запросе это поле уже имеет псевдоним «Контрагент».

 

Поставим в отчете отбор по контрагенту и посмотрим, какой запрос будет сформирован системой компоновки данных.

 

Видим, что условие отбора накладывается в итоговом запросе. Что, естественно, при отборе большого массива данных негативно скажется на производительности такого отчета.

Теперь в запросе, формирующем временную таблицу, дадим псевдоним полю ссылки контрагента такой же, как и в итоговом запросе.

 

 

Также в этом случае потребуется обновить связи таблиц , и снова добавить нужное поле в итоговый запрос.

В отчете оставим условие отбора по контрагенту и посмотрим, какой же теперь запрос будет сформирован системой компоновки данных.

Видим, что теперь СКД делает отбор необходимых данных на самом раннем этапе. И, соответственно, при больших объемах получаемых данных и громоздких запросах с большим количеством временных таблиц, это может очень существенно сказаться на производительности таких отчетов (да и не только отчетов – ведь сфера применения СКД ими не ограничивается). Возможно, подобный эффект наблюдается и в отчетах на построителе отчета, но был обнаружен в СКД – так что не судите строго.

В общем, это все, что хотелось рассказать в этой публикации.

23

См. также

Комментарии
Избранное Подписка Сортировка: Древо
1. Dream_kz 77 29.05.18 19:06 Сейчас в теме
А вот иногда такие псевдонимы будут мешать, так как в итогом запросе должны будут присутствовать именно все записи (своя логика по группировке и т.д), и в таких случаях псевдонимы лучше давать отличные от итоговых
POWone; zqzq; +2 Ответить
2. user_2010 310 29.05.18 21:56 Сейчас в теме
Разве без псевдонима нельзя было настроить для первой таблицы отбор по контрагенту?
swimdog; ValeriTim; elizarovs; olgerd666; +4 Ответить
3. tata_1211 58 29.05.18 22:09 Сейчас в теме
(2) Я продемонстрировала лишь факты. Выводы, как пользоваться полученной информацией, пожалуйста, делайте сами.К тому же, в тексте публикации есть оговорка, что пример довольно "искусственный".
Pavl0; &rew; NBir; +3 1 Ответить
5. TMV 14 30.05.18 04:36 Сейчас в теме
4. TMV 14 30.05.18 04:33 Сейчас в теме
9. &rew 7 31.05.18 08:54 Сейчас в теме
(2)Блин, сам со 2 раза вкурил. Смысл в том, что не МЫ накладываем условие, а СКД.
6. spezc 504 30.05.18 06:09 Сейчас в теме
Имхо правильным было бы отключение автозаполнения и добавления необходимого условия вручную на уровне первого запроса через закладку компоновка данных (условия). Автозаполнение зло.
Somebody1; rozer; Артано; kiruha; gea81; kiset; +6 Ответить
7. Бубузяка 62 30.05.18 09:50 Сейчас в теме
Злые вы. :)
Статья для начинающих или не думающих. Автор обращает внимание на проблему. Не всем приходит в голову изучать итоговый запрос. А тут, может кто-то прочтет и почешет затылок.
Полностью согласен с (6).
Артано; +1 Ответить
8. A_Max 16 30.05.18 11:16 Сейчас в теме
(7) А ещё будут почёсывать затылок и травить байки про глючность СКД, когда из-за автозаполнения отборы накладываются непредсказуемо (не так как думалось составителю)
POWone; elizarovs; +2 Ответить
11. SITR-utyos 1042 31.05.18 09:35 Сейчас в теме
(6) Отключать автозаполнение в СКД стоит, когда уже есть опыт и уже понимаешь что делаешь и как это будет интерпретироваться в итоговый запрос.
Автозаполнение - не всегда зло, иногда наоборот экономит время, если запрос простой
12. Артано 629 31.05.18 11:53 Сейчас в теме
(11) Если использовать автозаполнение, то опыт и не появится. Нет ничего сверхсложного самому указать какие поля и как ты хочешь использовать.
14. zqzq 17 01.06.18 10:15 Сейчас в теме
Автозаполнение не зло, если уметь его готовить. Также можно использовать автозаполнение + ручной твик с группе запроса {..}.

Итог простой:
1) "протягивать" синоним одного (фактически) поля как можно выше, тогда и отбор будет при первом упоминании;
2) разным (фактически) полям давать разные синонимы, я обычно использую информативные имена и/или добавляю префикс имени сходный с именем временной таблицы;
10. PerlAmutor 30 31.05.18 09:06 Сейчас в теме
Тут действительно есть о чем задуматься (не только о производительности), т.к. в обоих запросах могут присутствовать разные отборы с одним и тем же выбранным контрагентом. Предположим мы сначала отбираем документы со всеми контрагентами. А затем, во втором запросе отбираем во вторую временную таблицу только определенного контрагента, а в третью временную таблицу всех остальных, без этого контрагента. Если для первой временной таблицы сработает отбор по одному контрагенту, третья временная таблица будет пустой.
13. uri1978 122 31.05.18 12:42 Сейчас в теме
(10) Автозаполнение в СКД - зло. Использую только в простейших отчетах. В чем-то сложном, особенно с временными таблицами - только вручную указываю поля.
unichkin; +1 Ответить
15. SlavaKron 01.06.18 15:08 Сейчас в теме
Что нужно сделать, чтобы поле ВидДокумента было доступно в отборах?
Прикрепленные файлы:
17. gamden 05.06.18 13:04 Сейчас в теме
(15) Если еще актуально... В конструкторе запроса, вкладка "компоновка данных", в ней вкладка "условия" - добавь нужное поле.
18. SlavaKron 05.06.18 14:02 Сейчас в теме
Этого поля нет на вкладке условий компоновки данных, так как оно создано в параметрах виртуальной таблицы РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто. Прочие поля, добавленные таким образом, попадают в отбор СКД. Можно, конечно, добавить в "условия" это выражение, но тогда отбор по типу регистратора будет накладываться уже после формирования виртуальной таблицы.
Прикрепленные файлы:
Оставьте свое сообщение