Капитально об программе 1С 8.0-8.3-8.4, 7.7

ИНДЕКСИРОВАТЬ ПО в запросах 1С — ускорение в 15 раз

Сегодня пришлось оптимизировать свой запрос, который выполнялся 34 секунды.

Приведу его изначальные характеристики:

Итерации поиска причин

Подозрение вызвали соединения, убрал — нулевой результат.

Ушел от вложенного запроса — нулевой результат.

Ушел от полей в выборке через точку — 0.

Ушел от РАЗЛИЧНЫЕ — 0.

Условия в запросе по реквизитам Регистра сведений, проверил — Индексируются на уровне базы данных.

В итоге, от изначального запроса остался запрос срез последних с условиями ГДЕ (через параметры виртуальной таблицы условия не при применимы по логике требуемого результата).

Думаю «эврика», медленно срез последних выполняется, но ничего не поделаешь же, формирую без условий — моментально.

Перебираю комбинации из 3 условий — только замедление.

Вспоминаю про ИНДЕКСИРОВАТЬ ПО, которые обычно использовал при соединениях, но и в этих случаях не всегда давало заметный результат, возможно из-за характеристик платформы/кэширования MSSQL — сервера.

Исправляю запрос:

Получение данных срезом вообще без условий (215000)->Помещение во временную таблицу с индексацией 3 полей-Выборка из временной с наложением условий.

Ускорение в 15 раз (с 34 секунд до 2,27) на работающей системе ~ 141 пользователей, даже когда вернул все соединения и условия.

А вообще, изначально думал проблема в том, что в СКД закидывается большой объем данных из таблицы значений, а пришлось препарировать запрос.

На всякий случай приведу параметры системы: Платформа 8.3.5.1068, Intel XEON E3-1220 v2, 32 GB ОЗУ, windows/MSSQL/2012 64bit, 1С 32 bit, всё на одном сервере.

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

UPD 20/12/2015:

На неделе столкнулся с ситуацией, когда обрабатывался регистр сведения по истории реквизитов документов, обрабатывалось единовременно более 93000 документов, с 30-50 хранимых реквизитов, добавление индексации давало замедление в 2 раза.

Вывод: надо подходить к различным задачам индивидуально, в данном случае затраты на индексирование были неоправданы