Проверка оптимальности регистра в 1с

Материал размещён на сайте SoftPoint.ru/

Как мы знаем, [advert=103]1С[/advert]: Предприятие хранит регистры в базе данных в виде двух таблиц. В первой, которая именуется таблицей перемещений находятся все перемещения регистра. Во второй таблице находятся итоги по этому регистру в разрезе всех его измерений.

Итоги сохраняются на любой настоящий период, а также на данный момент (ТА). Периодичность сохранения итогов для оборотных регистров задается в конфигураторе для каждого регистра в отдельности, для регистров остатков неспециализированная периодичность для всех регистров выбирается в режиме предприятия.

АнтонГусев

В большинстве случаев при выборке данных из регистров на заданный момент времени, к примеру при проведении документов, осуществляется временный расчет регистров. Сейчас на SQL-сервере осуществляется запрос к обоим таблицам с заданием определенных условий фильтрации результирующей выборки, к примеру, по складу, перечню товаров, агенту и т.д. и т.п.

Для скорости выборки SQL-сервером данных из таблицы принципиально важно наличие индекса. Особенно принципиально важно, дабы индекс совпадал с условием отбора (фильтра). Тогда SQL-сервер скоро отберет необходимые эти. В большинстве случаев в 1С устанавливаются сходу пара фильтров, по складу, по перечню товаров и т.д. Но SQL-сервер в действительности будет применять лишь 1 индекс по каждой таблице. В 1С устроено так, что для таблицы итогов регистра существует один «покрывающий» индекс.

Это что может значить? А это значит, что имеется составной индекс, каковые включает в себя период и все измерения регистра в порядке их следования в конфигураторе, поскольку порядок следования измерений в таблице данных сходится с порядком следования их в конфигураторе.

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

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

Приведу пример проверки оптимальности регистра в 1С. В регистре имеется измерение «Склад» и «Товар». В таблице итогов регистра находится 1000 записей на любой период. Предположим, что это 2 товаров и 500 склада на остатке дают эту тысячу.

Предположим, что у нас проводится документ, в котором 100 товаров. Тогда вероятны следующие варианты.

В случае если SQL-сервер будет фильтровать по складу, то скоро отберет 500 записей, а после этого для каждой будет сравнивать на равенство одному из 100 товаров. В случае если же будет фильтр по товару, то SQL-сервер скоро отберет 200 записей и для каждой будет сравнивать равенству одному складу.

Отличие очевидна. В нашем случае селективность индекса «Период+Склад» будет равна 2 / 1000 * 100 % = 0,2 %. Селективность индекса «Период+Товар» будет равна 500 / 1000 * 100 % = 50 %. Так мы приходим к выводу, что в случае если у нас употребляется оба фильтра, то на первое место мы должны поставить товар, поскольку у получающегося индекса селективность больше.

3.4 Подстановка цены из регистра сведений


Похожие заметки:

Понравилась статья? Поделиться с друзьями: