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