Как использовать свойство Индексы таблицы значений в 8.1? #259340


#0 by TormozIT
Использование: Только чтение. Описание: Тип: ИндексыКоллекции. Содержит коллекцию индексов таблицы значений. Возможен обмен с сервером. Не могу понять, как использовать. Помогите примером.
#1 by TormozIT
Элементы коллекции: ИндексКоллекции Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются ИндексКоллекции. Методы: Добавить (Add) Описание: Список индексов коллекции. См. также: ИндексКоллекции ТаблицаЗначений, свойство Индексы
#2 by TormozIT
Уже раз 20 упал конфигуратор в режиме отладки (потянуло обратно на 8.0). 8.1.6.38 Нигде не могу найти описания
#3 by Defender aka LINN
Гм... А ИндексКоллекции что такое? СП хотя бы процитируй :) 8.1, правда, сейчас нет, но может кто скажет.
#4 by jcage
Насчет использовать - это просто.        ТаблицаСОднимИндексом.Индексы.Добавить("Данные1"); Но вот что они дают - я так и не понял. Написал обработку для тестирования: время поиска по индексированным колонкам практически не отличается от поиска по обычным.
#5 by jcage
Собственно можете сами посмотреть: Достаточно сделать форму и на форме реквизит "КоличествоСтрок", который будет отвечать за количество строк ТЗ для тестирования. Весь код автоматически сгенерированный заменить на данный.
#6 by TormozIT
Спасибо jcage. Наконец я познаю их!
#7 by jcage
Чем могу, рад помочь:)
#8 by TormozIT
Хотя получается то, что не познаю... Я тоже сравнивал замеры производительности. Че то не вкурил я прироста. Дык еще с этими индексами отладка падает постоянно у меня. Наверное индексировать то не все типы можно, да только вот описания НЕТУ!
#9 by jcage
Вот я и не вкурил прироста...
#10 by TormozIT
У меня важные процедуры, которые используют большое количество поисков по ТЗ. И я очень надеялся ускорить их за счет индексов. Но получил ШИШЬ =(
#11 by jcage
На мой взгляд ускорить лучше за счет запросов к ТЗ.
#12 by jcage
+ пробовал свертку заменить на "Сгруппировать" - ускорение многократно.
#13 by TormozIT
В моем случае не прокатит. Как я уже писал большое количество поисков. Это значит, что таблица будет каждый раз отправляться на сервер. Не думаю, что это ускорит процесс =)
#14 by TormozIT
Ап
#15 by jcage
нафига? Один раз отправляешь на сервер, а потом ищешь в ней сколько надо раз.
#16 by TormozIT
После каждого поиска возможна модификация.
#17 by jcage
Ну попробуй сравнить, что будет быстрее запросы или НайтиСтроки. Уверен, что запросы.
#18 by TormozIT
Я уверен, что индексы именно для оптимизации именно таких задач нужны. Только практика пока не дает подтверждения. Нужна документация. У меня используется метод Найти (поиск идет по одной колонке).
#19 by jcage
а оптимизировать алгоритм за счет возможности хранить таблицы на сервере никак?
#20 by jcage
+ насчет индексов ты прав, только вот что это за зверь и как его есть - пока не понятно.
#21 by TormozIT
Нет, это в общем случае временная таблица.
#22 by TormozIT
Для того, чтобы создать индекс, нужно добавить его в коллекцию индексов: Применение индекса оправдано, если Вы выполняете множественный поиск по ТЗ. Например, когда у Вас есть цикл, в котором вызывается ТаблицаЗначений.НайтиСтроки или ТаблицаЗначений.Найти. При единичном поиске отличие между поиском по индексу и поиском без индекса не очень велико, даже на 1000000 элементов. Также применение индекса оправдано, если Ваша ТЗ используется преимущественно для поиска, а количество операций изменения данных в ней невелико. Если это не так, то операции, требуемые для поддержания индекса, будут занимать больше времени, чем выйгрыш от применения индекса при поиске. При поиске индекс используется только в том случае, если состав колонок индекса и состав колонок, по которым ведется поиск, совпадают.
#23 by TormozIT
Применил в алгоритме с интенсивным поиском по ТЗ. В проверочном случае получил прирост 10% (2.08 сек против 2.28 сек). Там было порядка 500 поисков. Думаю, это неплохо.
#24 by TormozIT
Индексируются все типы
#25 by sindbad
Да вот решил поднять темку, просто самому было нужно использовать индексы для ускорения поиска. Так вот, замер производительности показал, что в таблице с 10'000 номенклатуры сама индексация (поле "ссылка") производится за 50 мс, - среднее время поиска элемента с индексацией:  0,000065032 с - среднее время поиска элемента без индексации: 0,013072343 с Таким образом, с индексацией поиск осуществляется аж в 200 раз быстрее! Причем по моим наблюдениям памяти на индексацию выделяется примерно 100-150 Кб, по-моему данная фишка неплохо разгружает сервак, особенно в терминальном режиме. Для тестирования был осуществлен поиск примерно 1000 элементов в обоих режимах, причем 90 процентов - это элементы, находящиеся в самом конце таблицы (с номером 9xxx), что позволило сделать тестирование достаточно объективным, по сравнению допустим с таблицей из 100-1000 элементов. Даже без замера производительности можно было заметить разницу в скорости - с индексами нет даже намеков на какие-либо тормоза (в т.ч. и в конце таблицы), в обычном режиме тормоза усиливаются по мере продвижения курсора в конец таблицы, что вполне логично. ps: Тестирование осуществлялось на движке 1С:Предприятие 8.1 (8.1.7.37), конфа "Управление торговлей", редакция 10.2 (10.2.13.1), режим работы - локальный (надо бы на сервере протестировать), комп - двухядерный P4 3 ГГц, память 1 ГБ DDR 2 на 800 шине, мать intel DG965RY, винт - 250 ГБ Seagate SATA-2 16M ncq 7200rpm, монитор 19' Samsung 940Fn :) Жду ваши мнения по этому поводу.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С