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

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

  • Тип: Дефект кода
  • Важность: Важный
  • Включена по умолчанию: Да
  • Теги: sql, standard, performance

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

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

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

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

Примеры

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

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

Источники

Соответствие стандартам

Источник диагностики