Составные индексы в таблице значений

1. ImHunter 315 16.02.17 16:15 Сейчас в теме
Писал очередные поиски по ТЗ и вспомнил историю. Для полновесной ее публикации - нет времени. Поэтому такая вот мини-публикация.

В объекте ТаблицаЗначений можно задавать индексы, ускоряющие всякие поиски/фильтровки (ТЗ.Индексы.Добавить(...)). В том числе, можно задать составной индекс - перечислением имен колонок.
Ну и как-то мне стало интересно, насколько эффективно используется составной индекс. И будет ли заменой составному индексу - несколько индексов по одиночным полям. Для тестирования накидал обработку (не полностью самостоятельную, а завязанную на специфичные метаданные).

Выводы следующие.
Составной индекс - эффективен. Но эффективен лишь в том случае, если фильтр накладывается точно таким же составом полей. При этом важен и порядок перечисления полей.

К примеру.

Вариант 1
Индекс: ТЗ.Индексы.Добавить("Контрагент, Договор");
Использование 1.1: ТЗ.НайтиСтроки(Новый Структура("Контрагент, Договор", ....)) - эффективно
Использование 1.2: ТЗ.НайтиСтроки(Новый Структура("Договор, Контрагент", ....)) - неэффективно

Вариант 2
Индекс: ТЗ.Индексы.Добавить("Контрагент"); ТЗ.Индексы.Добавить("Договор"); // отдельные индексы по полям
Использование 2.1: ТЗ.НайтиСтроки(Новый Структура("Контрагент, Договор", ....)) - неэффективно

Вариант 3
Индекс: ТЗ.Индексы.Добавить("Контрагент, Договор"); ТЗ.Индексы.Добавить("Договор"); // добавим еще один индекс по одному полю
Использование 3.1: ТЗ.НайтиСтроки(Новый Структура("Контрагент, Договор", ....)) - эффективно. И! Насколько помню, процентов на 5-7 эффективнее, чем тестирование по варианту 1.1 (только с одним составным индексом).
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dgolovanov 16.02.17 16:23 Сейчас в теме
Вывод из серии КО.
корум; +1
3. ImHunter 315 16.02.17 16:29 Сейчас в теме
Что есть - КО?
alex-l19041; +1
4. DenisCh 16.02.17 16:35 Сейчас в теме
Вспомнилась цитата из братьев "Мы обязательно его изобретём! Только не знаю, куда применить шины на тригенных полимерах..."

+
5. ImHunter 315 16.02.17 16:42 Сейчас в теме
(4) Так дело не в изобретениях;) А во внутренней уверенности, что некий поиск будет максимально эффективно работать.
Перед тем как писать тест - потратил какое-то время на поиски информации. Вдруг кто делал такой анализ. Ничего не нашлось.
+
6. herfis 498 16.02.17 17:13 Сейчас в теме
КО - это Капитан Очевидность.
Результаты в самом деле очевидны любому, кто знакомился с основами СУБД и принципами работы индексов. Индексы - они и в африке индексы.
Вопросы вызывают только результаты третьего теста с ускорением при использовании дополнительного индекса. Возможно, погрешности замеров или не очень чисто поставленный эксперимент.
+
7. ImHunter 315 16.02.17 18:43 Сейчас в теме
Где как реализована работа с индексами - СУБД ли это, либо программисты из 1С - на самом деле, непонятно.
Есть ли смысл - заморачиваться с индексами при расширении области поиска (исключении одного из полей из области поиска)? Может, проще сделать отдельные индексы на поля? СУБД (MSSQL) сказал бы - а ладно, справлюсь. Но ТЗ говорит категорично. Мне нужен четкий индекс.
+
8. herfis 498 17.02.17 10:23 Сейчас в теме
СУБД тоже нужен четкий индекс, либо хотя бы совпадающий по первым полям (именно поэтому важно правильно определять порядок измерений регистра - чтобы у дефолтного индекса была хорошая селективность и максимум попаданий). В противном случае индекс использовать не получится - СУБД будет справляться без него. Даже подходящий индекс СУБД использует далеко не всегда (решение принимается на основании собранной статистики) - но ТЗ это не касается, т.к. она вся уже в памяти.
+
9. DenisCh 17.02.17 10:32 Сейчас в теме
(8)
именно поэтому важно правильно определять порядок измерений регистра - чтобы у дефолтного индекса была хорошая селективность и максимум попаданий


То-я смотрю, в типовой торговле 10 регистр ТоварыНаСкладах - первым измерением идёт склад. Просто офигительная селективность )))
+
10. herfis 498 17.02.17 10:36 Сейчас в теме
(9) Иииии? Факт озвучен, но ваш вывод из него неочевиден.
+
11. DenisCh 17.02.17 10:46 Сейчас в теме
(10) Вывод очевиден - 1с не придерживается даже своих рекомендаций.
+
12. herfis 498 17.02.17 10:57 Сейчас в теме
(11) Ну, в случаях когда и склад и номенклатура будут вместе использоваться - селективность будет хорошая.
Но, ИМХО, выгоднее таки номенклатуру первой ставить. Будет лучше производительность соединений остатков с другими таблицами по номенклатуре.
+
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот