Сегодня обратил внимание на то что порядок объявления индексированных полей в таблице значений, влияет на скорость поиска. Таким образом необходимо отслеживать в каком порядке перечислены поля индекса и поля отбора. В случае нарушения последовательности поиск происходит практически без увеличения производительности.
Например имеем таблицу с колонками Номенклатура и ТипЦен нам необходимо будет искать в этой таблице значения по обоим полям. Поэтому добавляем индексы:
мТаблицаЦенИОстатков.Индексы.Добавить("Номенклатура");
мТаблицаЦенИОстатков.Индексы.Добавить("ТипЦен");
В случае если при поиске строк по полям мы напишем:
Отбор = Новый Структура();
Отбор.Вставить("ТипЦен", ТипЦен);
Отбор.Вставить("Номенклатура", Номенклатура);
Строки = мТаблицаЦенИОстатков.НайтиСтроки(Отбор);
При таком варианте написания поиск будет происходить перебором, в отличии, если бы мы написали строки поиска в обратном порядке, т.е. так же как и при объявлении индексов.
Отбор.Вставить("Номенклатура", Номенклатура);
Отбор.Вставить("ТипЦен", ТипЦен);
Однако даже при правильном указании полей поиска, производительность оставляет желать лучшего. Чем это обосновано не знаю, тем не менее наиболее лучший вариант получается, когда поиск производится по одной колонке, а дальше, в цикле, происходит поиск необходимых строк.
мТаблицаЦенИОстатков.Индексы.Добавить("Номенклатура");
Отбор = Новый Структура();
Отбор.Вставить("Номенклатура", Номенклатура);
Строки = мТаблицаЦенИОстатков.НайтиСтроки(Отбор);
Для Каждого ТекСтр Из Строки Цикл
Если ТекСтр.ТипЦен <> ТипЦен Тогда
Продолжить;
КонецЕсли;
//Код процедуры
КонецЦикла;
Например имеем таблицу с колонками Номенклатура и ТипЦен нам необходимо будет искать в этой таблице значения по обоим полям. Поэтому добавляем индексы:
мТаблицаЦенИОстатков.Индексы.Добавить("Номенклатура");
мТаблицаЦенИОстатков.Индексы.Добавить("ТипЦен");
В случае если при поиске строк по полям мы напишем:
Отбор = Новый Структура();
Отбор.Вставить("ТипЦен", ТипЦен);
Отбор.Вставить("Номенклатура", Номенклатура);
Строки = мТаблицаЦенИОстатков.НайтиСтроки(Отбор);
При таком варианте написания поиск будет происходить перебором, в отличии, если бы мы написали строки поиска в обратном порядке, т.е. так же как и при объявлении индексов.
Отбор.Вставить("Номенклатура", Номенклатура);
Отбор.Вставить("ТипЦен", ТипЦен);
Однако даже при правильном указании полей поиска, производительность оставляет желать лучшего. Чем это обосновано не знаю, тем не менее наиболее лучший вариант получается, когда поиск производится по одной колонке, а дальше, в цикле, происходит поиск необходимых строк.
мТаблицаЦенИОстатков.Индексы.Добавить("Номенклатура");
Отбор = Новый Структура();
Отбор.Вставить("Номенклатура", Номенклатура);
Строки = мТаблицаЦенИОстатков.НайтиСтроки(Отбор);
Для Каждого ТекСтр Из Строки Цикл
Если ТекСтр.ТипЦен <> ТипЦен Тогда
Продолжить;
КонецЕсли;
//Код процедуры
КонецЦикла;
Комментариев нет:
Отправить комментарий