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

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

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

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

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

 

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

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

 

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

 

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

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

 

 

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

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

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

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

См. также

Комментарии
1. Арман Б. (Dream_kz) 74 29.05.18 19:06 Сейчас в теме
А вот иногда такие псевдонимы будут мешать, так как в итогом запросе должны будут присутствовать именно все записи (своя логика по группировке и т.д), и в таких случаях псевдонимы лучше давать отличные от итоговых
POWone; zqzq; +2 Ответить
2. Надежда (user_2010) 283 29.05.18 21:56 Сейчас в теме
Разве без псевдонима нельзя было настроить для первой таблицы отбор по контрагенту?
swimdog; ValeriTim; elizarovs; olgerd666; +4 Ответить
3. Татьяна Федорова (tata_1211) 57 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. Ildar Gabdrakhmanov (spezc) 475 30.05.18 06:09 Сейчас в теме
Имхо правильным было бы отключение автозаполнения и добавления необходимого условия вручную на уровне первого запроса через закладку компоновка данных (условия). Автозаполнение зло.
Somebody1; rozer; Артано; kiruha; gea81; kiset; +6 Ответить
7. Бубузяка (Бубузяка) 62 30.05.18 09:50 Сейчас в теме
Злые вы. :)
Статья для начинающих или не думающих. Автор обращает внимание на проблему. Не всем приходит в голову изучать итоговый запрос. А тут, может кто-то прочтет и почешет затылок.
Полностью согласен с (6).
Артано; +1 Ответить
8. Max Avramenko (A_Max) 15 30.05.18 11:16 Сейчас в теме
(7) А ещё будут почёсывать затылок и травить байки про глючность СКД, когда из-за автозаполнения отборы накладываются непредсказуемо (не так как думалось составителю)
POWone; elizarovs; +2 Ответить
11. Информационно-технического развития Служба (SITR-utyos) 894 31.05.18 09:35 Сейчас в теме
(6) Отключать автозаполнение в СКД стоит, когда уже есть опыт и уже понимаешь что делаешь и как это будет интерпретироваться в итоговый запрос.
Автозаполнение - не всегда зло, иногда наоборот экономит время, если запрос простой
12. Артано Майаров (Артано) 498 31.05.18 11:53 Сейчас в теме
(11) Если использовать автозаполнение, то опыт и не появится. Нет ничего сверхсложного самому указать какие поля и как ты хочешь использовать.
14. ффф ыыы (zqzq) 17 01.06.18 10:15 Сейчас в теме
Автозаполнение не зло, если уметь его готовить. Также можно использовать автозаполнение + ручной твик с группе запроса {..}.

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