-
Notifications
You must be signed in to change notification settings - Fork 116
Open
Description
Опишите ошибку
Метод Найти в таблице значений не использует индекс колонки. В результате поиск по индексированной колонке выполняется с той же скоростью, что и по неиндексированной. При этом метод НайтиСтроки корректно использует индекс и работает значительно быстрее.
BenchmarkOneScript v0.7.0, OneScript v2.0.0, Microsoft Windows NT 10.0.20348.0
Intel Core i7-8700 CPU 3.20GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores
| Method | Categories | Размер | Baseline | Mean | Ratio |
|---|---|---|---|---|---|
| ТаблицаНайтиПоИндексу | Найти | 100,000 | Yes | 7,734.763 us | 1.00 |
| ТаблицаНайтиБезИндекса | Найти | 100,000 | No | 7,260.710 us | 0.94 |
| ТаблицаНайтиСтрокиСИндексом | НайтиСтроки | 100,000 | Yes | 4.482 us | 1.00 |
| ТаблицаНайтиСтрокиБезИндекса | НайтиСтроки | 100,000 | No | 16,016.251 us | 3,574.75 |
Воспроизведение ошибки
- Установить и запустить бенчмарк
opm install benchmarkbenchos run ./БенчмаркПоискаВТЗ.osБенчмаркПоискаВТЗ.os
&Параметры(100000)
Перем Размер Экспорт;
Перем Таблица;
Перем ИскомыйКлюч;
&ИсполняющаяСреда("stable")
//&ИсполняющаяСреда("lts")
Процедура ПриСозданииОбъекта()
КонецПроцедуры
&ПередКаждым
Процедура ПодготовитьДанные(Контекст) Экспорт
Таблица = Новый ТаблицаЗначений();
Таблица.Колонки.Добавить("СИндексом");
Таблица.Колонки.Добавить("БезИндекса");
Таблица.Индексы.Добавить("СИндексом");
Для к = 0 По Размер - 1 Цикл
Ключ = "Ключ" + Формат(к, "ЧГ=");
Стр = Таблица.Добавить();
Стр.СИндексом = Ключ;
Стр.БезИндекса = Ключ;
КонецЦикла;
ИскомыйКлюч = "Ключ" + Формат(Размер, "ЧГ=");
КонецПроцедуры
&Бенчмарк
&Эталон
&Категория("Найти")
Процедура ТаблицаНайтиПоИндексу() Экспорт
Значение = Таблица.Найти(ИскомыйКлюч, "СИндексом");
КонецПроцедуры
&Бенчмарк
&Категория("Найти")
Процедура ТаблицаНайтиБезИндекса() Экспорт
Значение = Таблица.Найти(ИскомыйКлюч, "БезИндекса");
КонецПроцедуры
&Бенчмарк
&Эталон
&Категория("НайтиСтроки")
Процедура ТаблицаНайтиСтрокиСИндексом() Экспорт
Значение = Таблица.НайтиСтроки(Новый Структура("СИндексом", ИскомыйКлюч));
КонецПроцедуры
&Бенчмарк
&Категория("НайтиСтроки")
Процедура ТаблицаНайтиСтрокиБезИндекса() Экспорт
Значение = Таблица.НайтиСтроки(Новый Структура("БезИндекса", ИскомыйКлюч));
КонецПроцедуры- В отчете видим, что метод
ТаблицаНайтиПоИндексувыполняется с той же скоростью, что иТаблицаНайтиБезИндекса
Ожидаемое поведение
Метод Найти должен использовать индекс колонки при его наличии. В этом случае ТаблицаНайтиПоИндексу должен выполняться значительно быстрее ТаблицаНайтиБезИндекса и иметь сопоставимую производительность с ТаблицаНайтиСтрокиСИндексом.
Окружение
- Версия: 2.0.0
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels