ИНДЕКСЫ

Предположим, что у нас есть некая таблица студентов одного факультета (students) содержащей следующие поля:

  • course - курс;
  • birthday - дата рождения студента;
  • name - ФИО студента.
cource  birthday name
1 01/03/23 Николаев Михаил Александрович
4 97/08/03 Колокольцев Андрей Андреевич
1 01/06/12 Гусева Мария Николаевна
3 98/05/28 Таранов Иван Иванович
2 99/12/16 Дмитриева Наталья Алексеевна

Записи в нашей таблице располагаются в той последовательности, в которой они были добавлены в таблицу.

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

Эффективным инструментом в решении подобных задач являются индексы. Индексы представляют собой значения, сформированные на основе значений полей столбцов входящих в индекс.

Если для нашей таблицы будет определен индекс idxBirthday в который будет входить поле birthday, при поиске записи будут отсортированы по этому полю.

FIND LAST students USE-INDEX idxBirthday NO-LOCK NO-ERROR.

Если в индекс входит несколько столбцов таблицы, то сортировка записей таблицы будет осуществлена по этим столбцам в той последовательности, в которой они указаны в индексе. 

Использование индексов повышает производительность поиска записей в таблице.

В Progress существуют следующие типы индексов

  • UNIQUE
  • PRIMARY
  • WORD-INDEX

UNIQUE - уникальный индекс. Требует, чтоб набор значений полей входящих в индекс всегда был уникальным, тем самым не допускаются дублирующие записи. При создании такого индекса нужно подходить обдумано и быть уверенным в том что выбранный набор столбцов действительно не должен дублироваться. Так например, для нашей таблицы students возможны случаи, когда два разных студента родились в один день и учатся на разных курсах, следовательно объявление индекса построенного только на этих полях как UNIQUE будет не верным. А вот паспортный данные студента, такие как серия и номер являются уникальными, не может быть два студента с одинаковыми паспортными данными, следовательно объявление UNIQUE индекса построенного на основе этих данных будет вполне оправданным.  

PRIMARY - основной индекс, используемый по умолчанию. Если AVM не удалось определить подходящий индекс и какой индекс использовать не указан явно в запросе, то по умолчанию будет использован именно PRIMARY индекс.

WORD-INDEX - индекс для выборки по словам символьного поля.

При каждом изменении полей таблицы входящих в индексы автоматически производиться перестроение этих индексов. 

Если необходимо изменить несколько значений полей таблицы входящих в индексы, наиболее рационально сделать это с помощью оператора ASSIGN. Тем самым индексы будут перестроены один раз, что увеличивает производительность.

Посмотреть и проанализировать какой индекс выбран AVM можно с помощью файла XREF.

Вы здесь: Главная Базы данных ИНДЕКСЫ