Писал очередные поиски по ТЗ и вспомнил историю. Для полновесной ее публикации - нет времени. Поэтому такая вот мини-публикация.
В объекте ТаблицаЗначений можно задавать индексы, ускоряющие всякие поиски/фильтровки (ТЗ.Индексы.Добавить(...)). В том числе, можно задать составной индекс - перечислением имен колонок.
Ну и как-то мне стало интересно, насколько эффективно используется составной индекс. И будет ли заменой составному индексу - несколько индексов по одиночным полям. Для тестирования накидал обработку (не полностью самостоятельную, а завязанную на специфичные метаданные).
Выводы следующие.
Составной индекс - эффективен. Но эффективен лишь в том случае, если фильтр накладывается точно таким же составом полей. При этом важен и порядок перечисления полей.
К примеру.
Вариант 1
Индекс: ТЗ.Индексы.Добавить("Контрагент, Договор");
Использование 1.1: ТЗ.НайтиСтроки(Новый Структура("Контрагент, Договор", ....)) - эффективно
Использование 1.2: ТЗ.НайтиСтроки(Новый Структура("Договор, Контрагент", ....)) - неэффективно
Вариант 2
Индекс: ТЗ.Индексы.Добавить("Контрагент"); ТЗ.Индексы.Добавить("Договор"); // отдельные индексы по полям
Использование 2.1: ТЗ.НайтиСтроки(Новый Структура("Контрагент, Договор", ....)) - неэффективно
Вариант 3
Индекс: ТЗ.Индексы.Добавить("Контрагент, Договор"); ТЗ.Индексы.Добавить("Договор"); // добавим еще один индекс по одному полю
Использование 3.1: ТЗ.НайтиСтроки(Новый Структура("Контрагент, Договор", ....)) - эффективно. И! Насколько помню, процентов на 5-7 эффективнее, чем тестирование по варианту 1.1 (только с одним составным индексом).
В объекте ТаблицаЗначений можно задавать индексы, ускоряющие всякие поиски/фильтровки (ТЗ.Индексы.Добавить(...)). В том числе, можно задать составной индекс - перечислением имен колонок.
Ну и как-то мне стало интересно, насколько эффективно используется составной индекс. И будет ли заменой составному индексу - несколько индексов по одиночным полям. Для тестирования накидал обработку (не полностью самостоятельную, а завязанную на специфичные метаданные).
Выводы следующие.
Составной индекс - эффективен. Но эффективен лишь в том случае, если фильтр накладывается точно таким же составом полей. При этом важен и порядок перечисления полей.
К примеру.
Вариант 1
Индекс: ТЗ.Индексы.Добавить("Контрагент, Договор");
Использование 1.1: ТЗ.НайтиСтроки(Новый Структура("Контрагент, Договор", ....)) - эффективно
Использование 1.2: ТЗ.НайтиСтроки(Новый Структура("Договор, Контрагент", ....)) - неэффективно
Вариант 2
Индекс: ТЗ.Индексы.Добавить("Контрагент"); ТЗ.Индексы.Добавить("Договор"); // отдельные индексы по полям
Использование 2.1: ТЗ.НайтиСтроки(Новый Структура("Контрагент, Договор", ....)) - неэффективно
Вариант 3
Индекс: ТЗ.Индексы.Добавить("Контрагент, Договор"); ТЗ.Индексы.Добавить("Договор"); // добавим еще один индекс по одному полю
Использование 3.1: ТЗ.НайтиСтроки(Новый Структура("Контрагент, Договор", ....)) - эффективно. И! Насколько помню, процентов на 5-7 эффективнее, чем тестирование по варианту 1.1 (только с одним составным индексом).
По теме из базы знаний
- Преобразование ТаблицыЗначений во Временную таблицу
- Лучшие методы сравнения таблиц значений
- Самые распространенные заблуждения об индексах в мире 1С
- Подсистема прав доступа (анализ ролей, отладка RLS, английский код, обычные и управляемые формы)
- Значение 1С8 -> ЗначениеВФайл 1C77 (ЗначениеВСтрокуВнутр, ЗначениеВСтроку)
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Вспомнилась цитата из братьев "Мы обязательно его изобретём! Только не знаю, куда применить шины на тригенных полимерах..."
(4) Так дело не в изобретениях;) А во внутренней уверенности, что некий поиск будет максимально эффективно работать.
Перед тем как писать тест - потратил какое-то время на поиски информации. Вдруг кто делал такой анализ. Ничего не нашлось.
Перед тем как писать тест - потратил какое-то время на поиски информации. Вдруг кто делал такой анализ. Ничего не нашлось.
КО - это Капитан Очевидность.
Результаты в самом деле очевидны любому, кто знакомился с основами СУБД и принципами работы индексов. Индексы - они и в африке индексы.
Вопросы вызывают только результаты третьего теста с ускорением при использовании дополнительного индекса. Возможно, погрешности замеров или не очень чисто поставленный эксперимент.
Результаты в самом деле очевидны любому, кто знакомился с основами СУБД и принципами работы индексов. Индексы - они и в африке индексы.
Вопросы вызывают только результаты третьего теста с ускорением при использовании дополнительного индекса. Возможно, погрешности замеров или не очень чисто поставленный эксперимент.
Где как реализована работа с индексами - СУБД ли это, либо программисты из 1С - на самом деле, непонятно.
Есть ли смысл - заморачиваться с индексами при расширении области поиска (исключении одного из полей из области поиска)? Может, проще сделать отдельные индексы на поля? СУБД (MSSQL) сказал бы - а ладно, справлюсь. Но ТЗ говорит категорично. Мне нужен четкий индекс.
Есть ли смысл - заморачиваться с индексами при расширении области поиска (исключении одного из полей из области поиска)? Может, проще сделать отдельные индексы на поля? СУБД (MSSQL) сказал бы - а ладно, справлюсь. Но ТЗ говорит категорично. Мне нужен четкий индекс.
СУБД тоже нужен четкий индекс, либо хотя бы совпадающий по первым полям (именно поэтому важно правильно определять порядок измерений регистра - чтобы у дефолтного индекса была хорошая селективность и максимум попаданий). В противном случае индекс использовать не получится - СУБД будет справляться без него. Даже подходящий индекс СУБД использует далеко не всегда (решение принимается на основании собранной статистики) - но ТЗ это не касается, т.к. она вся уже в памяти.
(8)
То-я смотрю, в типовой торговле 10 регистр ТоварыНаСкладах - первым измерением идёт склад. Просто офигительная селективность )))
именно поэтому важно правильно определять порядок измерений регистра - чтобы у дефолтного индекса была хорошая селективность и максимум попаданий
То-я смотрю, в типовой торговле 10 регистр ТоварыНаСкладах - первым измерением идёт склад. Просто офигительная селективность )))
(11) Ну, в случаях когда и склад и номенклатура будут вместе использоваться - селективность будет хорошая.
Но, ИМХО, выгоднее таки номенклатуру первой ставить. Будет лучше производительность соединений остатков с другими таблицами по номенклатуре.
Но, ИМХО, выгоднее таки номенклатуру первой ставить. Будет лучше производительность соединений остатков с другими таблицами по номенклатуре.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот