Каталог решений - Оптимизация динамического списка

Оптимизация динамического списка

Оптимизация динамического списка

В наличии

На управляемых формах 1С есть очень удобный и гибкий объект — ДинамическийСписок.
Удобный — создавать и поддерживать легко.
Гибкий — легко настраивается в пользовательском режиме.
Но есть у него большой недостаток — если его неправильно сконфигурировать, он будет работать очень медленно. Ниже несколько способов оптимизации динамических списков.

Категория:

Описание

База для оптимизации

Для тестовых данных использовалась самописная база с реальными данными большого справочника клиентов, строк – около миллиона, колонок – 26. В динамическом списке к справочнику присоединен регистр состояний клиентов (срез последних). Размер справочника такой, что не разворачивается в файловом варианте.

Для замера производительности использовался SQL Server Profiler, который показывает время выполнения запроса без дополнительных затрат на интерфейс. Конкретные цифры в статье приводить не буду, так как они индивидуальны для каждой базы. 

 

Способы оптимизации:

  1. 1. Оптимизация запроса

Первым по важности для обеспечения быстродействия динамического списка является оптимизация запроса. По оптимизации запросов написано много статей, но основные принципы перечислены ниже:

  • При соединении таблиц использовать индексы
  • Не использовать вложенные запросы
  • Избегать в запросе большого количества таблиц
  • По возможности избегать условий «ИЛИ», «НЕ», «ПОДСТРОКА», «МЕСЯЦ» «ВЫБОР КОГДА» и т.д
  • Стараться не использовать динамические(вычисляемые) поля


2. Флаг «Динамическое считывание данных»

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

Если флаг установлен, то запрос забирает из БД маленькие порции данных (на текущей версии 1С – по 45). Прокрутка списка в этом случае может подвисать.

Если флаг не установлен, то порции больше (на текущей версии 1С – по 1000). Прокрутка в этом случае комфортнее, но на выполнение запроса требуется больше времени.

Общие рекомендации по установке флага «Динамическое считывание данных»:

  • Если запрос выполняется быстро, и в выборке с учетом отборов обычно большое количество строк, то флаг лучше не устанавливать
  • Если запрос тяжелый, а в выборке с учетом отборов обычно записей не много или не часто используется прокрутка списка, то лучше флаг установить.

 3. Группировки в динамическом списке.

Здесь все просто – использование группировок может очень значительно замедлять список. Рекомендую просто отказаться от них и не включать их в пользовательские настройки.

 4. Сортировка.

От сортировки тоже бы хотелось отказаться, но это очень важная пользовательская функция. Общие рекомендации по использованию сортировки:

  • Сортировать список желательно по проиндексированным реквизитам
  • Не сортировать список по вычисляемым полям

 5. Отборы, поиск

Общие рекомендации:

  • Поля, по которым чаще всего устанавливаются отборы должны быть проиндексированы.
  • Если при этом сортировка списка отключена (т.е. сортировка производится по основному представлению — код или наименование основной таблицы динамического списка), а это почти всегда, то индексировать нужно «с доп. упорядочиванием».
  • Если на список накладывается несколько отборов, очень важен их порядок (на текущей версии платформы 1С). Правильный порядок отборов:
    1. Проиндексированные поля
    2. Неиндексированные поля
    3. Вычисляемые поля
  • Нарушение порядка может значительно замедлять список.
  • Контролировать порядок пользовательских отборов сложно, но можно, например, проиндексированные поля «вытащить» в отборы в конфигураторе, и они будут накладываться первыми.

  • Часто используемые сложные отборы (например, по вычисляемым полям или со сложными условиями) можно устанавливать в тексте запроса и оптимизировать. Для этого, например, можно использовать несколько форм динамического списка или несколько «вариантов» на одной форме.

 6. В пользовательском режиме

  • Лучше убирать ненужные к отображению колонки – это позволит облегчить запрос. Прирост к производительности правда очень незначительный.
  • Не использовать вывод дополнительных полей/характеристик через точку. Снижение производительности может быть очень высоким.

 7. Регламентные операции на MS SQL Server:

Обновление статистик, обслуживание индексов.

 8. Используйте SQL Server Profiler

Для отлавливания долгих запросов, анализа плана запроса и принятия дополнительных решений по оптимизации списка.

 

И в заключение хочу напомнить: динамический список это рабочая таблица, которая должна быстро обновляться. Не путайте его с отчетом и не загружайте лишними данными.

При таком подходе удалось оптимизировать динамический список тестовой базы с миллионным справочником, обновление списка с различными отборами не превышает 2-3 секунд.

has been added to your cart:
Оформление заказа