Индексы

Petro Bazeliuk —  Апрель 28, 2017 — Оставьте комментарий

Хочу рассмотреть вопросы и подготовку к сертификации. Учить правильные ответы плохой путь, а вот понимать ответы и применять их, вы тем самым становитесь на путь к уровню «1С:Эксперт». По сути это цикл записей с расширенными ответами на несколько вопросов из тестов.

Структуру индексов регистра сведений можно определить в режиме 1С:Предприятия, использовав функцию глобального контекста «ПолучитьСтруктуруХраненияБазыДанных».
Источники:
• ИТС: Индексирование таблиц
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 84.


Для периодического регистра сведений, в том числе подчиненного регистратору, кластерным индексом является (кроме регистров с периодичностью «по позиции регистратора»):
[ОРРХ | ОРНР1 + …] + Период + [Измерение 1 + …] — для 8.2;
[ОРРХ | ОРНР1 + …] [Измерение 1 + …] + Период — для 8.3, где
ОРРХ — если в конфигурации определены разделители, то в индексы может входит поле, которое содержит значение хэш-функции набора значений разделителей;
ОРНР — общие реквизиты, являющихся разделителями в режиме «независимо».
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 89.
• ИТС: Индексы таблиц базы данных


Для периодического регистра сведений, подчиненного регистратору, с периодичностью «по позиции регистратора» кластерным индексом является:
[ОРРХ | ОРНР1 + …] [Измерение 1 + …] + Период + Регистратор + НомерСтроки, где
ОРРХ — если в конфигурации определены разделители, то в индексы может входит поле, которое содержит значение хэш-функции набора значений разделителей;
ОРНР — общие реквизиты, являющихся разделителями в режиме «независимо».
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 90, с. 92 (описаны отличия для «1С:Предприятие 8.3»).
• ИТС: Индексы таблиц базы данных


Кластерный индекс для баз на платформе «1С:Предприятие 8.3» и СУБД MS SQL Server периодического регистра сведений, подчиненного регистратору, имеет вид (если нет общих реквизитов, являющихся разделителями):
[Измерение 1 + …] + Период
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 92.


Для ведущего измерения регистра сведений «1С:Предприятие» возможность включения индексирования в конфигураторе отключена. Для измерений свойство доступно для редактирования, если измерение не является ведущим. Для ведущих измерений индекс создается всегда.


Для периодического регистра сведений всегда будет создаваться индекс:
[ОРРХ | ОРНР1 + …] + Период + [Измерение 1 + …] для 8.2;
[ОРРХ | ОРНР1 + …] [Измерение 1 + …] + Период — для 8.3.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 89.
• ИТС: Индексы таблиц базы данных


Индексы повышают производительность поиска, сортировки данных и производительность СУБД.
Источники:
• wiki: Индекс (базы данных)


Платформа «1С:Предприятие» создает два типа индексов — кластерные и некластерные индексы. Индексы создаются неявным образом при создании объектов конфигурации, а так при использовании различных настроек объектов. Так же индекс можно создать явным образом, например, включением свойства «Индексировать».
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 87.
• ИТС: Индексы таблиц базы данных


Кластеризованный индекс — индекс, по значению которого отсортированы и хранятся строки данных в таблицах БД. Таблица может иметь только один кластерный индекс или иметь ни одного. Может быть уникальным, так и не уникальным (обеспечивается СУБД путем добавления служебных данных).
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 86.
• MSDN: Индексы


Кластеризованный индекс это тоже самое что и кластерный индекс.


Уникальный индекс — реализует ограничение целостности на таблице, исключая возможность вставки повторяющихся значений. Может быть либо кластерным, либо не кластерным.
Источники:
• MSDN: Индексы
• wiki: Индекс (базы данных)


Кластерный индекс — индекс, по значению которого отсортированы и хранятся строки данных в таблицах БД. Таблица может иметь только один кластерный индекс или иметь ни одного. Может быть уникальным, так и не уникальным (обеспечивается СУБД путем добавления служебных данных).
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 86.
• MSDN: Индексы


Уникальный индекс — реализует ограничение целостности на таблице, исключая возможность вставки повторяющихся значений. Может быть либо кластерным, либо не кластерным.
Источники:
• MSDN: Индексы
• wiki: Индекс (базы данных)


Кластерный индекс — индекс, по значению которого отсортированы и хранятся строки данных в таблицах БД. Таблица может иметь только один кластерный индекс или иметь ни одного. Может быть уникальным, так и не уникальным (обеспечивается СУБД путем добавления служебных данных).
Некластерный индекс — индекс, который содержит только указатели на записи таблицы. Таблица может иметь несколько различных некластерных индексов, каждый из которых определяет свой собственный порядок следования записей. Может быть уникальным, так и не уникальным.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 86.
• MSDN: Индексы
• wiki: Индекс (базы данных)


Наличие индексов не есть обязательным.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 86.
• MSDN: Индексы
• wiki: Индекс (базы данных)


Индексирование первого измерения регистра, если это измерение имеет составной тип может улучшить план запроса. В некоторых случаях этот индекс может работать намного эффективнее — чем использование конструкции ВЫРАЗИТЬ(... КАК ...).


B-tree — структура данных, дерево поиска. С точки зрения внешнего логического представления, сбалансированное (длина любых двух путей от корня до листьев различается не более, чем на единицу), сильно ветвистое дерево (свойство каждого узла дерева ссылаться на большое число узлов-потомков). Часто используется для хранения данных во внешней памяти.
Binary tree — иерархическая структура данных, в которой каждый узел имеет не более двух потомков (детей). Как правило, первый называется родительским узлом, а дети называются левым и правым наследниками.
Источники:
• wiki: B-дерево
• wiki: Двоичное дерево


Binary search tree — это двоичное дерево, для которого выполняются следующие дополнительные условия:
• оба поддерева — левое и правое — являются двоичными деревьями поиска;
•  у всех узлов левого поддерева произвольного узла X значения ключей данных меньше, нежели значение ключа данных самого узла X;
• у всех узлов правого поддерева произвольного узла X значения ключей данных больше либо равно, нежели значение ключа данных самого узла X.
Источники:
wiki: Двоичное дерево поиска


Binary heap —  такое двоичное дерево, для которого выполнены три условия:
• значение в любой вершине не меньше, чем значения её потомков;
• глубина всех листьев (расстояние до корня) отличается не более чем на 1 слой;
• последний слой заполняется слева направо без «дырок».
Источники:
• wiki: Двоичная куча


Структура внутренних и листовых страниц B-tree обычно отличается.
Источники:
• wiki: B-дерево


Ссылочная целостность (Referential integrity) — необходимое качество реляционной базы данных, заключающееся в отсутствии в любом её отношении внешних ключей, ссылающихся на несуществующие кортежи.
Источники:
• wiki: Ссылочная целостность


Кортеж — упорядоченный набор фиксированной длины.
Источники:
• wiki: Кортеж (информатика)


Внешний ключ (Foreign key) — это столбец или сочетание столбцов, которое применяется для принудительного установления связи между данными в двух таблицах.
Внешний ключ можно создать, определив ограничение FOREIGN KEY при создании или изменении таблицы.Если один или несколько столбцов, в которых находится первичный ключ для одной таблицы, упоминается в одном или нескольких столбцах другой таблицы, то в ссылке внешнего ключа создается связь между двумя таблицами. Этот столбец становится внешним ключом во второй таблице.
Источники:
• wiki: Внешний ключ
• MSDN: Ограничения FOREIGN KEY


Потенциальный ключ (Candidate key) — в реляционной модели данных — подмножество атрибутов отношения, удовлетворяющее требованиям уникальности и минимальности (несократимости).
Источники:
• wiki: Потенциальный ключ
• MSDN: Альтернативный ключ


Целостность базы данных (Database integrity) — соответствие имеющейся в базе данных информации её внутренней логике, структуре и всем явно заданным правилам. Каждое правило, налагающее некоторое ограничение на возможное состояние базы данных, называется ограничением целостности (integrity constraint).
Источники:
• wiki: Целостность базы данных


Первичный ключ (Primary key) — в реляционной модели данных один из потенциальных ключей отношения, выбранный в качестве основного ключа (или ключа по умолчанию). С точки зрения теории все потенциальные ключи отношения эквивалентны, то есть обладают одинаковыми свойствами уникальности и минимальности. Однако в качестве первичного обычно выбирается тот из потенциальных ключей, который наиболее удобен для тех или иных практических целей.
Источники:
• wiki: Первичный ключ


Часть индексов могут содержать значения хэш-функции значений разделителей — если тип разделителя — «Строка», или разделитель независимый и совместный, или разделителей больше одного.
Источники:
• ИТС: Индексы таблиц базы данных


С помощью MS SQL Management Studio можно увидеть, включен ли общий реквизит в состав индекса.
Способ получения существующих индексов с помощью конфигуратора, процедуры ПолучитьСтруктуруХраненияБазыДанных() имеет несколько ограничений:

  • Для всех объектных типов данных (справочники, документы и т. д.) в базе автоматически определяется кластерный индекс по полю Ссылка. И вот его в этой таблице вы не увидите, но про него надо просто помнить;
  • При использовании общего реквизита к большинству индексов первым столбцом ключа индекса добавляется DataSeparationHash. Этого факта, к сожалению, через ПолучитьСтруктуруХраненияБазыДанных() вы тоже не увидите, и про него тоже надо помнить;
  • Также в этой таблице вы не увидите индекса simplekey для регистра сведений.

Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 86.


Общий реквизит, последовательность общих реквизитов, хэш-функция общих реквизитов включаются в состав индекса первым полем.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 87-92.
• ИТС: Индексы таблиц базы данных


Если в конфигурации используется более одного общего реквизита, являющихся независимыми разделителями (ОРНР), в часть индексов включается их последовательность (ОРНР1 + ОРНР2 + … +) и в часть индексов включается их хэш-функция.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 87-92.
• ИТС: Индексы таблиц базы данных


Для непериодического регистра сведений, подчиненного регистратору, кластерным индексом является:
[ОРНР1 + … +] Регистратор + НомерСтроки, где
ОРНР — общие реквизиты, являющихся разделителями в режиме «независимо».
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 90.
• ИТС: Индексы таблиц базы данных


Для справочников, документов, планов видов характеристик, планов обменов, планов счетов, планов видов расчета, бизнес-процессов, точек маршрута бизнес-процессов, задач, кластерным индексом является:
[ОРНР1 + … +] Ссылка, где
ОРНР — общие реквизиты, являющихся разделителями в режиме «независимо».
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 88.
• ИТС: Индексы таблиц базы данных


Если в конфигурации определен единственный независимый разделитель, тип которого не «Строка», тогда в соответствующих индексах используется значение разделителя.
Источники:
• ИТС: Индексы таблиц базы данных


Разделитель итогов (Splitter) включается в состав индекса последним.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 91.
• ИТС: Индексы таблиц базы данных


Разделитель итогов (Splitter) включается в состав индекса если для регистра разрешено разделение итогов.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 91.
• ИТС: Индексы таблиц базы данных


Включен ли разделитель итогов (Splitter) в состав индекса можно увидеть с помощью MS SQL Management Studio и с помощью процедуры ПолучитьСтруктуруХраненияБазыДанных().


Разделитель итогов (Splitter) в индексе таблицы оборотов регистра накопления применяется для типа регистра накопления «Обороты».
Источники:
• ИТС: Индексы таблиц базы данных


Разделитель итогов (Splitter) в индексе таблицы остатков регистра накопления применяется для типа регистра накопления «Остатки».
Источники:
• ИТС: Индексы таблиц базы данных


При индексировании измерения ИзмерениеN регистра накопления, регистра бухгалтерии, регистра сведений с периодичностью «по позиции регистратора» будет создан индекс по таблице движений:
[ОРРХ | ОРНР1 + …] ИзмерениеN + Период + Регистратор + НомерСтроки, где
ОРРХ — если в конфигурации определены разделители, то в индексы может входит поле, которое содержит значение хэш-функции набора значений разделителей;
ОРНР — общие реквизиты, являющихся разделителями в режиме «независимо».
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 90.
• ИТС: Индексы таблиц базы данных


SimpleKey — короткий ключ записи регистра. Поле присутствует у непериодических регистров сведений, имеющих хотя бы одно измерение.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 89.
• ИТС: Индексы таблиц базы данных


Splitter — разделитель итогов. (См. пункт 36, 37, 38)


Некоторые индексы первым полем содержат поле с именем, не относящимся к колонкам таблиц регистра, и не являющимся ни периодом, ни регистратором. В составе имени поля есть «Field» — это ОРНР, общий реквизит, являющийся разделителям в режиме «независимо».
Источники:
• ИТС: Индексы таблиц базы данных


Индексировать ресурсы можно только у регистра сведений.


Индексировать реквизиты можно у регистров всех типов.


Если для реквизита «Реквизит» свойство «Индексировать» установлено в значение «Индексировать с доп. упорядочиванием» и при этом свойство «Длина кода» не равно 0, а свойство «Основное представление» равно «В виде кода», индекс будет вида:
[ОРРХ | ОРНР1 + …] Реквизит + Код + Ссылка
Если для реквизита «Реквизит» свойство «Индексировать» установлено в значение «Индексировать с доп. упорядочиванием» и при этом свойство «Длина наименования» не равно 0, а свойство «основное представление» равно «В виде наименования», индекс будет вида:
[ОРРХ | ОРНР1 +…] Реквизит + Наименование + Ссылка
Источники:
• ИТС: Индексы таблиц базы данных


Индексировать измерение регистра можно если оно не ведущее. (См. пункт 5)


Если измерению «ИзмерениеN» периодического регистра сведений (НЕ с периодичностью «по позиции регистратора») задано свойство «Индексировать» или свойство «Ведущее» и при этом это не единственное измерение, индекс будет вида:
[ОРРХ | ОРНР1 +…] ИзмерениеN + Период + Измерение1 + [Измерение2 +…], где
ОРРХ 
— если в конфигурации определены разделители, то в индексы может входит поле, которое содержит значение хэш-функции набора значений разделителей;
ОРНР — общие реквизиты, являющихся разделителями в режиме «независимо».
Источники:
• ИТС: Индексы таблиц базы данных


Если измерению «ИзмерениеN» непериодического регистра сведений задано свойство «Индексировать» или свойство «Ведущее» и при этом это не первое и не единственное измерение, индекс будет вида:
[ОРРХ | ОРНР1 +…] ИзмерениеN + Измерение1 + [Измерение2 +…], где
ОРРХ 
— если в конфигурации определены разделители, то в индексы может входит поле, которое содержит значение хэш-функции набора значений разделителей;
ОРНР — общие реквизиты, являющихся разделителями в режиме «независимо».
Источники:
• ИТС: Индексы таблиц базы данных


Поле с именем DataSeparationHash — хэш-функция общих реквизитов, являющихся разделителями.

Реклама

Petro Bazeliuk

Записи

Опыт работы с «1С:Предприятие 8» — более 10 лет, за это время реализовано 30 успешных проектов по итеративным методологиям Scrum и Kanban. Оптимальные решения для высоконагруженных ИБ с онлайном от 400 человек. Занимаюсь продвижением в массы системы контроля версий — git и методики git-flow, TDD, BDD, а также проработкой паттерна минимальной модификации конфигурации и внесением изменений без обновления базы данных. Время от времени участвую в проекте xUnitFor1C.

Комментариев нет

Be the first to start the conversation!

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s