Project

Profile

Help

HostedRedmine.com has moved to the Planio platform. All logins and passwords remained the same. All users will be able to login and use Redmine just as before. Read more...

Bug #999168

open

Неожиданное поведение индексов таблицы значений. Создание дублей и длительность обновления.

Added by Сергей Старых 13 days ago. Updated 12 days ago.

Status:
New
Priority:
Normal
Assignee:
-
Category:
-
Sprint/Milestone:
-
Start date:
Due date:
% Done:

0%

Estimated time:

Description

https://partners.v8.1c.ru/forum/t/2217947/m/2217947

1С 8.3.0-27

Проблема

Неожиданное поведение индексов таблицы значений. Создание дублей и длительность обновления.

Воспроизведение

Открыть приложенную внешнюю обработку в управляемом клиентском приложении. Нажать кнопку "Команда1". При этом на сервере выполнится код
ТаблицаЗначений = Новый ТаблицаЗначений;
ТаблицаЗначений.Колонки.Добавить("Данные");
ТаблицаЗначений.Колонки.Добавить("Индекс");
Для Счетчик = 1 По 100000 Цикл
ТаблицаЗначений.Добавить();
КонецЦикла;
ПредДлительность = 0;
Для Счетчик = 1 По 20 Цикл
ТаблицаЗначений.Индексы.Добавить("Индекс");
Начало = ТекущаяУниверсальнаяДатаВМиллисекундах();
ТаблицаЗначений.ЗаполнитьЗначения(, "Данные");
Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Начало;
Сообщить("Длительность" + Счетчик + "=" + Длительность +", Разница = " + (Длительность-ПредДлительность));
ПредДлительность = Длительность;
КонецЦикла;

и будет выведены сообщения

Длительность1=47, Разница = 47
Длительность2=88, Разница = 41
Длительность3=136, Разница = 48
Длительность4=182, Разница = 46
Длительность5=208, Разница = 26
Длительность6=249, Разница = 41
Длительность7=284, Разница = 35
Длительность8=319, Разница = 35
Длительность9=373, Разница = 54
Длительность10=403, Разница = 30
Длительность11=441, Разница = 38
Длительность12=489, Разница = 48
Длительность13=519, Разница = 30
Длительность14=571, Разница = 52
Длительность15=601, Разница = 30
Длительность16=638, Разница = 37
Длительность17=667, Разница = 29
Длительность18=718, Разница = 51
Длительность19=753, Разница = 35
Длительность20=786, Разница = 33

Из которых следуют выводы

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

На отправил


Files

ОтважныйБобр.epf (225 KB) ОтважныйБобр.epf Сергей Старых, 2025-01-06 03:10 PM
Actions #1

Updated by Сергей Старых 12 days ago

  • Description updated (diff)

Also available in: Atom PDF