|
Индексы 1С + MS SQL Server | ☑ | ||
---|---|---|---|---|
0
jamesgold
08.08.16
✎
18:26
|
Добрый день, прошу помочь!
Имеем в 1с запрос поля в котором покрываются определенным индексом на СУБД, но самое первое поле в индексе не используется в запросе, - получается что этот индекс оптимизатор запросов использовать не будет. Помогите понять физическую причину почему так происходит? Буду рад любой полезной ссылке или грамотному комментарию. |
|||
1
b_ru
08.08.16
✎
18:39
|
>>Помогите понять физическую причину почему так происходит?
Ну собственно для любого человека, который в принципе понимает что такое индекс это вроде как очевидно. https://ru.wikipedia.org/wiki/Индекс_(базы_данных)#.D0.9F.D0.BE.D1.81.D0.BB.D0.B5.D0.B4.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D0.BE.D1.81.D1.82.D1.8C_.D1.81.D1.82.D0.BE.D0.BB.D0.B1.D1.86.D0.BE.D0.B2_.D0.B2_.D1.81.D0.BE.D1.81.D1.82.D0.B0.D0.B2.D0.BD.D0.BE.D0.BC_.D0.B8.D0.BD.D0.B4.D0.B5.D0.BA.D1.81.D0.B5 Для понимания процессов, происходящих под капотом движка БД можно погуглить про хеш-функции и B-деревья и попробовать в познавательных целях реализовать эти библиотечные алгоритмы самому. В конце концов все получившие профильное образование это в свое время проделывали на лабах. |
|||
2
H A D G E H O G s
08.08.16
✎
18:40
|
(0) Алгоритм не знает, куда идти по B+ дереву.
Если в условие поиска заданы все индексные поля - алгоритм пройдет по всему B+ дереву, если не все - по части B+ Дерева, а затем по данным. https://ru.wikipedia.org/wiki/B-дерево#.D0.9F.D0.BE.D0.B8.D1.81.D0.BA |
|||
3
H A D G E H O G s
08.08.16
✎
18:42
|
Вершина B+ дерева - это точка начала поиска, это приблизительная середина всех УПОРЯДОЧЕННЫХ значений индекса. Середина не по значению, а по количеству элементов.
|
|||
4
jamesgold
08.08.16
✎
18:48
|
(1) Значит ли это что каждый уровень дерева это таже последовательность к примеру измерений в регистре? Т.е. верхний уровень дерева индекса это Измерение1?
|
|||
5
H A D G E H O G s
08.08.16
✎
18:49
|
(4) нет.
|
|||
6
jamesgold
08.08.16
✎
18:54
|
Получается что вершина дерева это начальные значения оглавления без которого поиск в этом индексе для данной СУБД невозможен, так?
|
|||
7
H A D G E H O G s
08.08.16
✎
18:55
|
Берется весь РС, создается табличка (в "памяти") с двумя колонками
ИЗМ1+ИЗМ2, где ИЗМ1+ИЗМ2 - байтовое поле, тупо сложение обоих измерений как наборов байт и RID, где RID - ссылка на строку данных Табличка сортируется по возрастанию, делится на 2 части и серединка формирует вершину дерева поиска, рядом записывается ее RID. Левая и правая часть списка формирует левую и правую ветвь дерева, и.т.д. |
|||
8
H A D G E H O G s
08.08.16
✎
18:56
|
(6) Можно сказать и так.
|
|||
9
jamesgold
08.08.16
✎
18:58
|
(7) Очень интересно!
|
|||
10
jamesgold
08.08.16
✎
19:02
|
(7) Зачем складываются измерения? Ссылка формируется на конкретные значения в таблице данных?
|
|||
11
H A D G E H O G s
08.08.16
✎
19:05
|
(9) Представь индекс, как УПОРЯДОЧЕННОЕ оглавление книги, к примеру
Овощи-Заморозка -11 стр Овощи-Сбор- 12 стр Овощи-Сушка - 13 стр Фрукты-Сбор - 24 стр. Фрукты-Хранение - 24 стр. И список в 2000 действий. И ты ищешь: 1) Овощи-Сбор 2) Просто Сбор Для 1 варианта, ты найдешь примерно серединку и где - то тут рядом, будут Овощи и недалеко Сбор :-). И узнаешь номер страницы. Для 2 варианта - ты с листочком пойдешь по списку. |
|||
12
Йохохо
08.08.16
✎
19:07
|
(0) что такое "индекс 1с покрывает все поля в запросе"? в 1с такой индекс всего 1 и каатся вопрос в (0) не очень сформулирован
|
|||
13
H A D G E H O G s
08.08.16
✎
19:08
|
(10) Не понял вопроса. Измерения складываются, чтобы сформировать значение индекса. Побайтово - для отхода от строк, дат, чисел, и.т.д.
|
|||
14
jamesgold
08.08.16
✎
19:13
|
(13) Как я сначала понял измерения складываются для того чтобы потом упорядочить по получившемуся значению и сформировать ссылку на конкретные данные уже в той таблице для которой индекс строился, если индекс не кластерный.
|
|||
15
H A D G E H O G s
08.08.16
✎
19:18
|
(14) Ссылка на данные - RID - уже есть. Измерения складываются (измерения - это пример, вместо измерения лучше сказать - поля индекса), чтобы по ним искать RID.
|
|||
16
jamesgold
08.08.16
✎
19:24
|
H A D G E H O G огромное тебе спасибо! Я кажется понял! Выражаю тебе огромную благодарность от меня и от тех кому данная тема поможет в будущем. Спасибо!
|
|||
17
H A D G E H O G s
08.08.16
✎
19:29
|
||||
18
Провинциальный 1сник
08.08.16
✎
19:40
|
А в фокспро, помнится, можно было индекс создать не только по полю или комбинации полей, но и по любому выражению над ними)
|
|||
19
Optan
08.08.16
✎
19:52
|
(18) Было дело) А еще там можно было создавать и переключать "на лету" тэги индекса (разные индексы(индексные выражения) для одной таблицы). Для относительно небольших СУБД до сих пор бывает использую...хотя поддержку и прекратили(
|
|||
20
H A D G E H O G s
08.08.16
✎
20:00
|
кхе-кхе-кхе
|
|||
21
vde69
08.08.16
✎
20:43
|
вообще-то индексы они разные бывают, все что описал H A D G E H O G s справедливо только для составных индексов...
но вот на сколько 1с использует несоставные индексы - это второй вопрос... хотя в целом тут все правильно писали :) |
|||
22
vde69
08.08.16
✎
20:47
|
(21) +
например галочка "индексировать" на измерении регистра создает отдельный индекс, и в этом случае оптимизатор вполне может его использовать даже при одном самом среднем отборе... |
|||
23
Jija Grenkov
08.08.16
✎
20:57
|
(22) В 1с в общем случае все индексы составные. Индексирвоать на регистре сделает составной индекс на первое место выставив индексируемый реквизит. И index seek будет, если явно запрашивать это поле. Если запрашиваемое поле на 2-м месте, то уже будет index scan.
|
|||
24
jamesgold
09.08.16
✎
11:24
|
(5) Значит ли это что каждый уровень дерева это таже последовательность к примеру измерений в регистре? Т.е. верхний уровень дерева индекса это Измерение1?
Вот нашел такую статью где написано обратное: структура индекса в СУБД представляет собой дерево значений проиндексированных полей. На первом уровне дерева находятся значения первого поля индекса, на втором – второго и так далее. Чтобы выполнить поиск данных по индексу, сначала необходимо провести поиск по значению первого поля индекса, затем – второго и так далее. Если, например, условие по первому полю индекса не указано, то индекс уже не сможет обеспечить быстрый поиск. Если указано условие по нескольким первым полям индекса, а затем одно или несколько полей индекса не задано, то индекс может быть использован. |
|||
25
jamesgold
09.08.16
✎
11:26
|
Получается что вершина дерева это первое измерение
|
|||
26
H A D G E H O G s
09.08.16
✎
11:40
|
(24) задача решается просто.
Спроектируйте алгоритм индекса сами. |
|||
27
jamesgold
09.08.16
✎
11:50
|
(26) Хотелось обсудить это, возможно это описано тоже самое оглавление только другими словами
|
|||
28
jamesgold
09.08.16
✎
11:51
|
Ведь первое поле в индексе это и есть начало оглавления, - с него начинается индекс
|
|||
29
jamesgold
09.08.16
✎
14:37
|
up
|
|||
30
SSSSS_AAAAA
09.08.16
✎
14:55
|
(18) В общем-то, в фоксе индексы только по выражению и одно поле есть всего лишь частный случай выражения. И никаких индексов по нескольким полям.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |