При оптимизации высоконагруженных баз данных на платформе 1С:Предприятие (в частности, конфигурации «Управление производственным предприятием 1.3») часто возникает вопрос включения индексации по дополнительным измерениям регистров накопления, таким как ТоварыНаСкладах и СвободныеОстатки. Рассмотрим подробнее, как индексы СУБД влияют на скорость работы системы и стоит ли включать индексирование по измерению СерияНоменклатуры.
При решении задач производительности важно помнить фундаментальное правило работы индексов в СУБД:
INSERT и UPDATE. При изменении движений документа СУБД вынуждена не только записать строки в основную таблицу и пересчитать итоги, но и перестроить B-дерево каждого индекса, созданного для данного регистра.Проанализируем ситуацию: если основной проблемой системы является долгая запись наборов записей при проведении документов (например, вызов процедуры ЗаписатьНаборЗаписейНаСервере занимает много времени), то добавление новых индексов лишь ухудшит показатели производительности при проведении.
Разберем архитектуру хранения данных в 1С. Справочник СерииНоменклатуры имеет обязательного владельца — элемент справочника Номенклатура. Это означает, что любое конкретное значение серии жестко привязано к своей номенклатуре.
По умолчанию в регистрах накопления платформа автоматически создает индексы, где первым полем выступает Номенклатура. Если в запросе или параметрах виртуальной таблицы указать отбор одновременно по двум полям:
Номенклатура = &Номенклатура
И СерияНоменклатуры = &Серия
СУБД будет эффективно использовать существующий индекс по полю Номенклатура. Дополнительный индекс исключительно по измерению СерияНоменклатуры не потребуется, так как выборка уже будет ограниченной и быстрой.
Включение индексирования для СерияНоменклатуры имеет смысл только тогда, когда в системе выполняются массовые запросы с отбором исключительно по серии, без указания номенклатуры-владельца. В реальных учетных сценариях 1С:УПП такие запросы встречаются крайне редко.
Выясним причину медленной работы и рассмотрим практические шаги по оптимизации:
Номенклатура, Склад) должны располагаться в самом верху списка измерений регистра.Номенклатура, полученная из серии (СерияНоменклатуры.Владелец). Это позволит СУБД использовать стандартный индекс без сканирования всей таблицы.UPDATE STATISTICS) и реиндексации таблиц регистров, а также установите подходящий коэффициент заполнения страниц (FILLFACTOR).