ИНДЕКСЫ
Предположим, что у нас есть некая таблица студентов одного факультета (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.