[NEW] [Запросы] Несоответствие индексов и условий запроса
Описание проблемы, ошибки, которую надо диагностировать
Необходимо убедиться в том, что для всех условий, использованных в запросе, имеются подходящие индексы.
Условия используются в следующих секциях запроса:
- ВЫБРАТЬ … ИЗ … ГДЕ <условие>
- СОЕДИНЕНИЕ … ПО <условие>
- ВЫБРАТЬ … ИЗ <ВиртуальнаяТаблица>(, <условие>)
- ИМЕЮЩИЕ <условие>
Для каждого условия должен существовать подходящий индекс. Подходящим является индекс, удовлетворяющий следующим требованиям:
- Индекс содержит все поля перечисленные в условии;
- Эти поля находятся в самом начале индекса;
- Эти поля идут подряд, то есть между ними не «вклиниваются» поля, не участвующие в условии запроса
Ссылка на источник, подтверждающее нарушение либо обоснование наличия проблемы
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 минут
Надо в mdclasses читать индексы для каждого объекта в соответствии с версией платформы.
Видел базу в которой давно не делали тестирование и исправление. Индексы в таблицах не совпадали с тем, что возращает ПолучитьСтруктуруХраненияБазыДанных.
Как же давно я ждал этого!)
Это скорее ее качество кода а ошибка. Ведь эффект налицо, замедление работы.
И вторую часть стандарта тоже хочется про индексы в условиях виртуальных таблиц.
1 Правило будет выглядеть "спамящим", хотя и срабатывания будут правильными. Уже есть подобное правило - мое про NULL в полях соединений. Причины просты
- не все запросы стоит оптимизировать
- и нужно помнить, что избыточные индексы вредят.
- часть запросов к ИБ будут "конфликтовать\противоречить" друг другу, т.к. будут требовать разные сочетания
2 и я не согласен с пунктом "1. Индекс содержит все поля перечисленные в условии;" это условие далеко не всегда нужно, важно, чтобы часть сравниваемых полей попадала в индекс вот п.2 и 3 важны
предлагаю убрать п.1
Само правило, конечно, хорошее, я давно мечтаю его реализовать, еще со времен Пули.
ну и условию ""1. Индекс содержит все поля перечисленные в условии;" большая часть не будет удовлетворять, вот и будут ФП/почти ФП