Добрый день!
Есть простой запрос, имеющий условие "В (&Процессы)". Параметр "Процессы" - это список значений, который формируется программно.
В консоли запросов руками заполнил этот параметр из 11 элементов и выполнил. Запрос выполнялся 7 секунд.
В качестве эксперимента заменил условие "В" и прописал в тексте запроса вместо В (&Процессы)" 11 параметров (ДанныеБизнесПроцессов.БизнесПроцесс = &Процесс1 или ДанныеБизнесПроцессов.БизнесПроцесс = &Процесс2 или ....и так 11 раз). Знаю, что использовать "Или" в запросе тоже не оптимально, однако запрос выполняется 1 секунду.
Есть ли способы оптимизировать исходный запрос и уйти от конструкции В или другим способом уменьшить время выполнения запроса?:
Вот его текст:
Есть простой запрос, имеющий условие "В (&Процессы)". Параметр "Процессы" - это список значений, который формируется программно.
В консоли запросов руками заполнил этот параметр из 11 элементов и выполнил. Запрос выполнялся 7 секунд.
В качестве эксперимента заменил условие "В" и прописал в тексте запроса вместо В (&Процессы)" 11 параметров (ДанныеБизнесПроцессов.БизнесПроцесс = &Процесс1 или ДанныеБизнесПроцессов.БизнесПроцесс = &Процесс2 или ....и так 11 раз). Знаю, что использовать "Или" в запросе тоже не оптимально, однако запрос выполняется 1 секунду.
Есть ли способы оптимизировать исходный запрос и уйти от конструкции В или другим способом уменьшить время выполнения запроса?:
Вот его текст:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ДанныеБизнесПроцессов.ГлавнаяЗадача КАК ГлавнаяЗадача,
ДанныеБизнесПроцессов.ВедущаяЗадача КАК ВедущаяЗадача,
ДанныеБизнесПроцессов.БизнесПроцесс КАК Ссылка,
ДанныеБизнесПроцессов.Наименование КАК Наименование,
ДанныеБизнесПроцессов.Завершен КАК Выполнена,
ДанныеБизнесПроцессов.Дата КАК Дата,
ДанныеБизнесПроцессов.ПометкаУдаления КАК ПометкаУдаления
ИЗ
РегистрСведений.ДанныеБизнесПроцессов КАК ДанныеБизнесПроцессов
ГДЕ
ДанныеБизнесПроцессов.БизнесПроцесс В (&Процессы)
УПОРЯДОЧИТЬ ПО
Дата
ПоказатьПо теме из базы знаний
- 50+ советов для успешной сдачи 1С: Специалист по платформе
- Как читать чужой код? Часть 3. Разбор и доработка запросов
- Как из 1С отдать миллионы строк в BI и успеть это сделать быстро
- Интеграции с маркетплейсами из одного окна: Озон, ВБ, Яндекс, Сбер, Али, ЛаМода для 1С:УНФ, УТ, КА, ERP
- Переход на Clickhouse для анализа метрик
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Хм, попробуйте такой запрос
возможны какие-то опечатки, проверить же не на чем
возможны какие-то опечатки, проверить же не на чем
Выбрать
спр.Ссылка
Поместить Таб
Из
БизнесПроцесс.Задание спр //Здесь правильно свой безнес процесс укажите
где
Спр.Ссылка в (&Процессы)
;
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ДанныеБизнесПроцессов.ГлавнаяЗадача КАК ГлавнаяЗадача,
ДанныеБизнесПроцессов.ВедущаяЗадача КАК ВедущаяЗадача,
ДанныеБизнесПроцессов.БизнесПроцесс КАК Ссылка,
ДанныеБизнесПроцессов.Наименование КАК Наименование,
ДанныеБизнесПроцессов.Завершен КАК Выполнена,
ДанныеБизнесПроцессов.Дата КАК Дата,
ДанныеБизнесПроцессов.ПометкаУдаления КАК ПометкаУдаления
ИЗ
Таб
левое соединение
РегистрСведений.ДанныеБизнесПроцессов КАК ДанныеБизнесПроцессов
по Таб.Ссылка = ДанныеБизнесПроцессов.БизнесПроцесс
ГДЕ
ДанныеБизнесПроцессов.БизнесПроцесс Есть Не Null //В (&Процессы)
Показать
Странно. Я бы первым делом убедился, что статистика актуальна. Обновил ее вручную, например (exec sp_updatestats, для mssql)
Возможно, закэширован неоптимальный план выполнения. Обновление статистики форсирует пересчет плана.
Возможно, закэширован неоптимальный план выполнения. Обновление статистики форсирует пересчет плана.
Преобразовал запрос в такой вид, время выполнения - всё еще 6 секунд.
ВЫБРАТЬ
ДанныеБизнесПроцессов.БизнесПроцесс КАК БизнесПроцесс
ПОМЕСТИТЬ Таб
ИЗ
РегистрСведений.ДанныеБизнесПроцессов КАК ДанныеБизнесПроцессов
ГДЕ
ДанныеБизнесПроцессов.БизнесПроцесс В(&Процессы)
ИНДЕКСИРОВАТЬ ПО
БизнесПроцесс
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ДанныеБизнесПроцессов.ГлавнаяЗадача КАК ГлавнаяЗадача,
ДанныеБизнесПроцессов.ВедущаяЗадача КАК ВедущаяЗадача,
ДанныеБизнесПроцессов.БизнесПроцесс КАК Ссылка,
ДанныеБизнесПроцессов.Наименование КАК Наименование,
ДанныеБизнесПроцессов.Завершен КАК Выполнена,
ДанныеБизнесПроцессов.Дата КАК Дата,
ДанныеБизнесПроцессов.ПометкаУдаления КАК ПометкаУдаления
ИЗ
Таб КАК Таб
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеБизнесПроцессов КАК ДанныеБизнесПроцессов
ПО Таб.БизнесПроцесс = ДанныеБизнесПроцессов.БизнесПроцесс
Показать
(22) Признак стоит у двух измерений. В моём случае я индексирую то измерение, по которому идёт соединение. У меня выборка будет 10-15 элементов, мне кажется, тут индексирование можно и не использовать, т.к. лишние ресурсы на создание индекса.
Что имею сейчас: Пакетный запрос, состоящий из 3-х запросов. В каждом из них используется условие "В(&Просцессы). Запрос выполняет 28 сек. Заменил это условие на "=&Процессы1 или =Процессы2 и т.д", программно формирую текст запроса. После изменения время выполнения запроса сократилось с 28 сек до 1 секунды.
Теперь планирую переделать запрос через объект СхемаЗапроса, чтобы было красиво.
Что имею сейчас: Пакетный запрос, состоящий из 3-х запросов. В каждом из них используется условие "В(&Просцессы). Запрос выполняет 28 сек. Заменил это условие на "=&Процессы1 или =Процессы2 и т.д", программно формирую текст запроса. После изменения время выполнения запроса сократилось с 28 сек до 1 секунды.
Теперь планирую переделать запрос через объект СхемаЗапроса, чтобы было красиво.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот