bsl-language-server icon indicating copy to clipboard operation
bsl-language-server copied to clipboard

[NEW] [Запросы] Несоответствие индексов и условий запроса

Open Stepa86 opened this issue 5 years ago • 6 comments

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

Необходимо убедиться в том, что для всех условий, использованных в запросе, имеются подходящие индексы.

Условия используются в следующих секциях запроса:

  • ВЫБРАТЬ … ИЗ … ГДЕ <условие>
  • СОЕДИНЕНИЕ … ПО <условие>
  • ВЫБРАТЬ … ИЗ <ВиртуальнаяТаблица>(, <условие>)
  • ИМЕЮЩИЕ <условие>

Для каждого условия должен существовать подходящий индекс. Подходящим является индекс, удовлетворяющий следующим требованиям:

  1. Индекс содержит все поля перечисленные в условии;
  2. Эти поля находятся в самом начале индекса;
  3. Эти поля идут подряд, то есть между ними не «вклиниваются» поля, не участвующие в условии запроса

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

https://its.1c.ru/db/v8std#content:652:hdoc

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

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

  • [ ] :ant: Ошибка
  • [ ] :cop: Уязвимость
  • [ ] :guardsman: Потенциальная уязвимость
  • [x] :poop: Качество кода
  • [ ] :trollface: Другое

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

  • [ ] :broken_heart: Блокирующая / Blocker
  • [ ] :heart: Критическая / Critical
  • [x] :yellow_heart: Важная / Major
  • [ ] :blue_heart: Незначительная / Minor
  • [ ] :green_heart: Информационная / Info
  • [ ] :revolving_hearts: Другое

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

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

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

30 минут

Stepa86 avatar Jul 26 '20 09:07 Stepa86

Надо в mdclasses читать индексы для каждого объекта в соответствии с версией платформы.

theshadowco avatar Jul 27 '20 05:07 theshadowco

Видел базу в которой давно не делали тестирование и исправление. Индексы в таблицах не совпадали с тем, что возращает ПолучитьСтруктуруХраненияБазыДанных.

akabrr avatar Oct 07 '20 18:10 akabrr

Как же давно я ждал этого!)

asosnoviy avatar Oct 08 '20 04:10 asosnoviy

Это скорее ее качество кода а ошибка. Ведь эффект налицо, замедление работы.

И вторую часть стандарта тоже хочется про индексы в условиях виртуальных таблиц.

zeegin avatar Jan 09 '23 13:01 zeegin

1 Правило будет выглядеть "спамящим", хотя и срабатывания будут правильными. Уже есть подобное правило - мое про NULL в полях соединений. Причины просты

  • не все запросы стоит оптимизировать
  • и нужно помнить, что избыточные индексы вредят.
  • часть запросов к ИБ будут "конфликтовать\противоречить" друг другу, т.к. будут требовать разные сочетания

2 и я не согласен с пунктом "1. Индекс содержит все поля перечисленные в условии;" это условие далеко не всегда нужно, важно, чтобы часть сравниваемых полей попадала в индекс вот п.2 и 3 важны

предлагаю убрать п.1

Само правило, конечно, хорошее, я давно мечтаю его реализовать, еще со времен Пули.

artbear avatar Jan 14 '23 13:01 artbear

ну и условию ""1. Индекс содержит все поля перечисленные в условии;" большая часть не будет удовлетворять, вот и будут ФП/почти ФП

artbear avatar Jan 14 '23 13:01 artbear