Перейти к содержанию

Соединение с вложенными запросами (JoinWithSubQuery)

Тип Поддерживаются
языки
Важность Включена
по умолчанию
Время на
исправление (мин)
Теги
Дефект кода BSL Важный Да 10 sql
standard
performance

Описание диагностики

При написании запросов не следует использовать соединения с вложенными запросами. Следует соединять друг с другом только объекты метаданных или временные таблицы.

Если запрос содержит соединения с вложенными запросами, то это может привести к следующим негативным последствиям:

  • Крайне медленное выполнение запроса при слабой загрузке серверного оборудования
  • Нестабильная работа запроса. При некоторых условиях запрос может работать достаточно быстро, при других - очень медленно
  • Значительная разница по времени выполнения запроса на разных СУБД
  • Повышенная чувствительность запроса к актуальности и полноте статистик. Сразу после полного обновления статистик запрос может работать быстро, но через некоторое время опять замедлиться

Примеры

Пример потенциально опасного запроса, использующего соединение с вложенным запросом:

ВЫБРАТЬ *
ИЗ Документ.РеализацияТоваровУслуг
ЛЕВОЕ СОЕДИНЕНИЕ (
   ВЫБРАТЬ Измерение1 ИЗ РегистрСведений.Лимиты
   ГДЕ Поле В (&СписокЗначений) 
   СГРУППИРОВАТЬ ПО 
   Измерение1
) ПО Ссылка = Измерение1

Источники

Сниппеты

Экранирование кода

// BSLLS:JoinWithSubQuery-off
// BSLLS:JoinWithSubQuery-on

Параметр конфигурационного файла

"JoinWithSubQuery": false