Skip to content

[NEW] [Запросы] Использование логического "ИЛИ" в условиях соединения #1561

@artbear

Description

@artbear

Описание проблемы, ошибки, которую надо диагностировать

Не рекомендуется использовать логическое ИЛИ в условиях соединения, то есть в секции ПО запроса. Это так же может привести к выбору неоптимального плана и медленной работе запроса. Простого универсального способа переписать такой запрос без использования ИЛИ не существует. Следует проанализировать решаемую задачу и попытаться найти другой алгоритм ее решения.

В некоторых случаях возможно переписать запрос через ОБЪЕДИНИТЬ ВСЕ
Например, вместо

ВЫБРАТЬ Реализация.Ссылка
ИЗ Документ.Реализация.Товары КАК Реализация
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Товары КАК Товар
  ПО Реализация.Товар = Товар.Ссылка
  И (Товар.Артикул = "001" ИЛИ Товар.Цена = 100)

можно использовать

ВЫБРАТЬ Реализация.Ссылка
ИЗ Документ.Реализация.Товары КАК Реализация
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Товары КАК Товар
  ПО Реализация.Товар = Товар.Ссылка
  И Товар.Артикул = "001"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ Реализация.Ссылка
ИЗ Документ.Реализация.Товары КАК Реализация
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Товары КАК Товар
  ПО Реализация.Товар = Товар.Ссылка
  И Товар.Цена = 100

или

  • сначала отобрать товары во временной таблице,
  • а потом сделать соединение по этой временной таблице с простым условием

Ссылка на источник, подтверждающее нарушение либо обоснование наличия проблемы

Параметры диагностики

Тип Статья на русском

  • 🐜 Ошибка
  • 👮 Уязвимость
  • 💂‍♂️ Потенциальная уязвимость
  • 💩 Качество кода
  • :trollface: Другое

Важность Статья на русском

  • 💔 Блокирующая / Blocker
  • ❤️ Критическая / Critical
  • 💛 Важная / Major
  • 💙 Незначительная / Minor
  • 💚 Информационная / Info
  • 💞 Другое

Тэги Статья на русском

  • STANDARD - "Нарушение стандартов 1С"
  • LOCKINOS - "Не будет работать в другой ОС"
  • SQL - "Проблема с запросом"
  • PERFORMANCE - "Проблема производительности"
  • BRAINOVERLOAD - "Непонятный код"
  • BADPRACTICE - "Плохая практика программирования"
  • CLUMSY - "Излишние действия"
  • DESIGN - "Ошибка в проектировании"
  • SUSPICIOUS - "Подозрительный код"
  • UNPREDICTABLE - "Непредсказуемо работающий код"
  • DEPRECATED - "Устаревшая функциональность"
  • ERROR - "Ошибочная конструкция"
  • LOCALIZE - "Проблемы локализации"

Время на исправление (минут)

15 минут

Дополнительная информация

Metadata

Metadata

Assignees

No one assigned

    Labels

    component/diagnosticsДоработка / создание диагностики

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions