Ответ вслух Senior Язык запросов обновлено

Неявные соединения

Вопрос

Почему опытные разработчики 1С осторожно относятся к обращению через точку внутри запросов?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

В запросе точка не читает объект целиком, как во встроенном языке, но каждое обращение превращается в левое соединение с таблицей реквизита.

Что должно прозвучать в ответе

  • Каждая точка это неявное левое соединение

  • Для составных типов соединение со всеми таблицами типа

  • План запроса становится сложным, СУБД ошибается в оценках

  • Решение: ВЫРАЗИТЬ, явные соединения, выбирать только нужные поля

  • Проверка плана запроса в технологическом журнале или СУБД

Что могут спросить следом

  • Чем это отличается от обращения через точку в коде?
  • Как увидеть итоговый SQL-запрос?

Разбор

В запросе точка не читает объект целиком, как во встроенном языке, но каждое обращение превращается в левое соединение с таблицей реквизита. Если поле составного типа, например Регистратор, соединения будут со всеми таблицами типов, у которых есть такой реквизит, и запрос с десятком таких полей превращается в огромный SQL. СУБД с таким планом справляется плохо. Поэтому для составных полей использую ВЫРАЗИТЬ, а там, где можно, явные соединения и выборку только нужных полей. Итоговый SQL смотрю в технологическом журнале (событие DBMSSQL или DBPOSTGRS) или профайлере СУБД.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.