Skip to content

Стандарт 655: Использование запроса, выполняющего соединение с вложенным запросом. #168

@marmyshev

Description

@marmyshev

Название проверки

Использование запроса, выполняющего соединение с вложенным запросом.

Английское название проверки
??

Правило анализа кода/метаданных

Подписка на соединение модели запроса и проверка что правый источки является подзапросом

Мета-информация (пожалуйста, заполните если знаете):

  • Номер стандарта: 655
  • Код проверки: ql-join-to-sub-query
  • Тип ошибки: PERFORMANCE
  • Критичность: MAJOR
  • Код ошибки АПК: 494

Параметры проверки

  • NA

Текст ошибки

Использование запроса, выполняющего соединение с вложенным запросом.

Пример некорректного решения

  • NA

Описание, почему так делать нельзя

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример корректного решения

  • NA

Дополнительные материалы

Metadata

Metadata

Assignees

Labels

ql1C:Query Language, язык запросов 1СstandardsПоддержка стандартовАПКДоработка совместимоси с функциональностю АПК ред.1

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions