
Индексирование
Рассмотрим в качестве примера таблицу данных о поставщиках.
Файл Городов Файл Поставщиков
|
Указа тель | ||||||||||||||||||
Владимир |
1 | ||||||||||||||||||
Владимир |
5 | ||||||||||||||||||
Рязань |
4 | ||||||||||||||||||
Тамбов |
2 | ||||||||||||||||||
Тамбов |
3 |
Рис. 9. Индексирование файла поставок по полю Город
Предположим, что часто выполняется запрос Найти всех поставщиков из города С, где С – некоторый параметр. В этом случае администратор БД может выбрать способ хранения данных, основанный на двух хранимых файлах:
Файл с данными о поставщиках;
Файл с данными о городах.
Причем в файле городов применяется упорядочивание по алфавиту. Указанный запрос можно выполнить различными способами.
1. Найти в файле поставщиков все записи, для которых названием города является Владимир. В этом случае нужно просмотреть файл от начала до конца.
2. В файле городов необходимо найти строки, содержащие Владимир, а затем, согласно указателям, извлечь все соответствующие записи из файла поставщиков.
Файл городов называется индексом.Индекс – файл особого типа, в котором запись состоит из двух значений: данных и указателей.
Индекс можно сравнить с предметным указателем обычной книги, которая состоит из списка слов с указателями (№ страниц) для упрощения поиска связанной информации.
Если индекс основан на основе ключевого поля (создается автоматически), то он называется первичным индексом.
Если индекс основан на основе другого поля, то он называется вторичный индекс.
Можно использовать несколько индексов.
Пример. Хранимый файл может иметь индекс по полю город и статус поставщика. Эти индексы могут использоваться как раздельно, так и совместно для более эффективного поиска нужных данных.
Несколько индексов
Указатель |
Статус |
2 3 5 4 1 |
5 10 25 30 50 |
Город |
Указатель |
Владимир Владимир Рязань Т Т |
1 5 4 2 3
|
Файл поставок
Пост |
Фамилия |
Статус |
Город |
1 |
Иванов |
50 |
Владимир |
2 |
Алферов |
5 |
Тамбов |
3 |
Якушев |
10 |
Тамбов |
4 |
Быков |
30 |
Рязань |
5 |
Гусев |
25 |
Владимир |
Рассмотрим совместное использование индексов на примере.
Пример. Найти поставщиков из Тамбова со статусом 5.
Решение.По индексу Городнаходим записиТамбова(2,3). По индексу Статус находим ссылку на статус 5 (2). Сопоставляя эти результаты видим, что нас интересует Алферов.
Можно использовать индексирование на основе комбинации полей.
-
Город / Статус
Указатель
Владимир / 25
5
Владимир / 50
1
Рязань / 30
4
Тамбов / 5
2
Тамбов / 10
3
До сих пор предполагалось, что в качестве указателей используются указатели записи. Однако, на практике указатели указывают не на запись, а на страницу, которая размещена на диске. Необходимая страница извлекается в оперативную память, а затем на этой странице ищется запись с нужными данными. Индекс такого типа называется неплотным индексом. Поскольку в нем не содержатся указатели на каждую запись индексированного файла.