Часто в процессе разработки возникает парадоксальная ситуация: мы стараемся улучшить запрос, добавив в него ограничения, но производительность отчета падает. Давайте разберем, почему это происходит и как правильно оптимизировать работу с данными в 1С:Предприятие.
Когда мы обращаемся к виртуальным таблицам, таким как РегистрСведений.ЦеныНоменклатуры.СрезПоследних или РегистрНакопления.ТоварыНаСкладах.Остатки, платформа генерирует сложный SQL-запрос. Если мы передаем в параметры виртуальной таблицы сложные условия, например В ИЕРАРХИИ, оптимизатор СУБД может выбрать неэффективный план выполнения.
Более того, соединение виртуальной таблицы с другими данными напрямую в одном запросе заставляет сервер каждый раз вычислять эту таблицу заново. Если объем данных велик, это приводит к резкому росту нагрузки на дисковую подсистему и процессор.
Главный совет — не пытайтесь сделать всё в одном «большом» запросе. Разбейте его на несколько этапов. Первым делом соберите нужные данные в ВременнаяТаблица. Это позволит платформе четко понимать последовательность действий.
Рассмотрим, как это реализовать на практике:
Номенклатура. Это критически важно для скорости последующего соединения.Если вы используете конструкцию ПОМЕСТИТЬ, обязательно используйте ИНДЕКСИРОВАТЬ ПО. Без явного индекса по полям, участвующим в соединении, SQL-сервер будет вынужден сканировать всю таблицу (Table Scan), что сводит на нет все усилия по оптимизации.
ВЫБРАТЬ
Цены.Номенклатура,
Цены.Цена
ПОМЕСТИТЬ ВТ_Цены
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены) КАК Цены
ИНДЕКСИРОВАТЬ ПО
Номенклатура
;
Оператор В ИЕРАРХИИ в параметрах виртуальной таблицы — частая причина «тормозов». Вместо того чтобы заставлять систему вычислять иерархию внутри виртуальной таблицы, попробуйте сделать следующее:
ГДЕ Номенклатура В (ВЫБРАТЬ Номенклатура ИЗ ВТ_Номенклатура) вместо использования В ИЕРАРХИИ напрямую в параметрах.Если запрос все еще работает медленно, не гадайте — проанализируйте план выполнения запроса. Это позволит увидеть, на каком этапе происходит Table Scan или тяжелое соединение Hash Match. В 1С для этого удобно использовать инструменты анализа производительности и технологический журнал.
Подведем итог, как сделать отчет быстрым:
ГДЕ или во временные таблицы.Следуя этим правилам, вы добьетесь предсказуемого и быстрого выполнения даже самых сложных отчетов, так как SQL-сервер сможет эффективно использовать индексы и строить оптимальные планы запросов.