Файлы индексов
Для каждой таблицы создается, по меньшей мере, один файл индексов – IDX-файл. Максимальное возможное количество файлов индексов не более 63. Каждый файл индексов содержит битовую карту состояния страниц файла (BitMap) и собственно индексные страницы. Дополнительно к этому первый индексный файл (с расширением .01) содержит адресный конвертер записей.
Бит карты BitMap IDX-файла указывает на присутствие/отсутствие в соответствующей странице информации (страница занята/свободна).
Индексные страницы содержат информацию о простых и составных индексах таблицы. Индексы предназначены для повышения скорости поисковых операций в БД.
Простой индекс по столбцу A строится из пар вида:
Значение < - > RowId
Составной индекс по столбцам строится из пар вида:
Значение1+Значение2+ … +ЗначениеN < - > RowId
Структура первого файла индексов приведена на рисунке 7.
При использовании в SQL-запросе условий поиска, наложенных на индексируемые столбцы, ядро СУБД автоматически подключает аппарат индексов.
Структура индексов представляет собой B*-дерево, каждый узел которого является страницей IDX-файла. При добавлении информации в индексированную таблицу дерево индексов разветвляется (занимая свободные страницы файла индексов), растет уровень дерева, т.е. количество узлов, которое необходимо пройти по дереву для определения местоположения искомых данных (соответственно, операций чтения данных страниц файла индексов). При удалении данных из таблицы индексные структуры упрощаются, освобождая занятые страницы.
Индексы ссылаются на файл данных только косвенно, через адресный конвертер – специальную структуру данных, которая по номеру записи позволяет определить её местонахождение в файле данных. Каждой записи с номером N в адресном конвертере соответствует указатель на её местонахождение в виде пары чисел:
< номер файла данных >< номер страницы в этом файле >
Следовательно, размер адресного конвертера пропорционален максимальному количеству ROWID, указанному при создании таблицы. На рисунке 8 приведена схема взаимодействия адресного конвертера и индексов.
Длина индекса в СУБД ЛИНТЕР не может превышать 1024 байта.