Индексы таблиц 1С и СУБД

Для того, чтобы понять суть индексов, необходимо понимать, как происходит поиск данных в таблицах, в зависимости от запросов, которые выполняются.

Поиск по ссылке

Рассмотрим пример запроса

Выбрать
    Наименование,
    ИНН
ИЗ
    Справочник.Контрагенты
ГДЕ
    Ссылка = &Ссылка

Для поиска значения полей Наименование и ИНН, СУБД сначала надо найти строку с указанным GUID, например, пусть это будет «c6fbb4e3-85f4-11ea-99e8-94659cbc8da0«.Для этого нам придется пройтись по каждой строке и сравнить значение ключа с требуемым.

Такой проход называется Сканирование (Scan).

Курс 1С: Эксперт. Поиск в СУБД по ссылке (GUID)

Рассмотрим, какие преимущества нам даст сортировка по полю. Если вся таблица отсортирована по колонке GUID, то мы, например, сможем искать следующим образом:

  1. Делим таблицу на 2 части, далее мы определяем, в какой части находится наше значение – ниже или выше.
  2. Далее делим на 2 ту часть, которую выделили и т.д.
  3. Разбиением на 2 мы движемся по всей колонке, пока не выясним, где же наше значение.

Так работает двоичное дерево поиска данных. В СУБД же используется Сбалансированное дерево, которое дает не меньше преимуществ, но его устройство не много сложнее.Более подробно сбалансированное дерево я буду рассматривать позже.

Для понимания преимущества сортировки таблицы достаточно понимать пример с двоичным деревом.

Курс 1С: Эксперт. B-Tree сбалансированное дерево
На рисунке двоичное дерево (Binary tree).

Колонка, по которой отсортирована таблица называется индексированным полем. Сама отсортированная таблица называется индексом. По отсортированной колонке мы можем осуществлять уже поиск (Seek), не сканирование (Scan).

В видео уроке 4-2 я рассказываю устройство сбалансированного дерева на примере блочной структуры хранения данных в СУБД.

Поиск по Наименованию

Рассмотрим пример запроса

Выбрать
    Ссылка
ИЗ
    Справочник.Контрагенты
ГДЕ
    Наименование = &Наименование

Наша таблица отсортирована по ссылке, поэтому мы можем искать по наименованию только сканированием (перебором всех строк). Для быстрого поиска по конкретному полю, создается дополнительный индекс – это отдельная дополнительная таблица, отсортированная по необходимому полю (утрировано!!).

Курс 1С: Эксперт. Поиск в СУБД. Индекс 1С по Наименованию
Поиск в справочнике 1С по индексу «Наименование»

Рассмотрим пример запроса

Выбрать
    ИНН
ИЗ
    Справочник.Контрагенты
ГДЕ
    Наименование = &Наименование

В этом случае, нам необходимо сначала найти Ссылку по Наименованию, потом перейти в таблицу с данными, найти строку по ссылке, и только тогда мы получим ИНН. Т.е. нам требуется в 2 раза больше операций ввода вывода I/O, чем в случае, когда мы ищем просто по полной таблице данных.

Какие индексы бывают

  1. Кластерными и некластерными;
  2. Покрывающими и непокрывающими;
  3. Низкоселективными и высокоселективными.

Плюсы и минусы индексов

  • Безусловным плюсом является – быстрый поиск данных и ускорение выполнения запросов.
  • Минусом является – обслуживание дополнительных таблиц: чем больше индексов, тем дольше делается запись данных.

Данная тема подробнее рассматривается в пакете видео-курса «Секреты 1С: Эксперта» Шаг 2. Занятие 03-01 Справочники + Таблицы БД.

Константин Ефимов | 1С: Эксперт. Ускорение работы 1С зависит от правильного использования индексов.
Ускорение работы 1С зависит от правильного использования индексов.
КОНСТАНТИН ЕФИМОВ
Комментарии и вопросы