Соединение с вложенными запросами (JoinWithSubQuery)¶
Тип | Поддерживаются языки |
Важность | Включена по умолчанию |
Время на исправление (мин) |
Теги |
---|---|---|---|---|---|
Дефект кода |
BSL |
Важный |
Да |
10 |
sql standard performance |
Описание диагностики¶
При написании запросов не следует использовать соединения с вложенными запросами. Следует соединять друг с другом только объекты метаданных или временные таблицы.
Если запрос содержит соединения с вложенными запросами, то это может привести к следующим негативным последствиям:
- Крайне медленное выполнение запроса при слабой загрузке серверного оборудования
- Нестабильная работа запроса. При некоторых условиях запрос может работать достаточно быстро, при других - очень медленно
- Значительная разница по времени выполнения запроса на разных СУБД
- Повышенная чувствительность запроса к актуальности и полноте статистик. Сразу после полного обновления статистик запрос может работать быстро, но через некоторое время опять замедлиться
Примеры¶
Пример потенциально опасного запроса, использующего соединение с вложенным запросом:
ВЫБРАТЬ *
ИЗ Документ.РеализацияТоваровУслуг
ЛЕВОЕ СОЕДИНЕНИЕ (
ВЫБРАТЬ Измерение1 ИЗ РегистрСведений.Лимиты
ГДЕ Поле В (&СписокЗначений)
СГРУППИРОВАТЬ ПО
Измерение1
) ПО Ссылка = Измерение1
Источники¶
Сниппеты¶
Экранирование кода¶
// BSLLS:JoinWithSubQuery-off
// BSLLS:JoinWithSubQuery-on
Параметр конфигурационного файла¶
"JoinWithSubQuery": false