bslls:JoinWithSubQuery¶
Соединение с вложенными запросами (JoinWithSubQuery)¶
- Тип: Дефект кода
- Важность: Важный
- Включена по умолчанию: Да
- Теги:
sql,standard,performance
Описание диагностики¶
При написании запросов не следует использовать соединения с вложенными запросами. Следует соединять друг с другом только объекты метаданных или временные таблицы.
Если запрос содержит соединения с вложенными запросами, то это может привести к следующим негативным последствиям:
- Крайне медленное выполнение запроса при слабой загрузке серверного оборудования
- Нестабильная работа запроса. При некоторых условиях запрос может работать достаточно быстро, при других - очень медленно
- Значительная разница по времени выполнения запроса на разных СУБД
- Повышенная чувствительность запроса к актуальности и полноте статистик. Сразу после полного обновления статистик запрос может работать быстро, но через некоторое время опять замедлиться
Примеры¶
Пример потенциально опасного запроса, использующего соединение с вложенным запросом:
ВЫБРАТЬ *
ИЗ Документ.РеализацияТоваровУслуг
ЛЕВОЕ СОЕДИНЕНИЕ (
ВЫБРАТЬ Измерение1 ИЗ РегистрСведений.Лимиты
ГДЕ Поле В (&СписокЗначений)
СГРУППИРОВАТЬ ПО
Измерение1
) ПО Ссылка = Измерение1
Источники¶
Соответствие стандартам¶
- #std655, п. 1.1: Ограничения на соединения с вложенными запросами и виртуальными таблицами — Диагностика «Соединение с вложенными запросами (JoinWithSubQuery)» проверяет условие пункта 1.1 стандарта std655.
Источник диагностики¶
- Исходная статья
- Ревизия:
f4616cda8a216789ee40529ed857e614b9e2ea25 - Лицензия:
LGPL-3.0-or-later