Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы и банки данных / Базы и банки данных (5 сем).doc
Скачиваний:
76
Добавлен:
01.05.2014
Размер:
705.54 Кб
Скачать

Индексирование

Рассмотрим в качестве примера данные о поставщиках, а также важный запрос типа «Найти всех поставщиков из города С». При этом администратор базы данных может выбрать способ сохранения данных, схематически показанный на рис.3. он основан на двух хранимых файлах: файле с данными о поставщиках и файле с данными о городах. Предполагается, что в файле городов используется алфавитное упорядочение по полю ГОРОД с RID-указателями на соответствующие записи в файле поставщиков.

Файл городов (индекс) Файл поставщиков (данные)

Номер

Фамилия

Скидка

Город

Азов

S1

Иванов

20

Ростов

Ростов

S2

Петров

10

Таганрог

Ростов

S3

Сидоров

30

Таганрог

Таганрог

S4

Федоров

20

Ростов

Таганрог

S5

Аверьянов

30

Азов

Рис.3. Индексирование файла по полю ГОРОД файла городов

Для поиска поставщиков из Ростова можно применить следующие стратегии.

  1. Найти весь файл поставщиков, найти все записи, для которых названием города является строка Ростов.

  2. Найти файл городов со строкой Ростов, а затем согласно указателям извлечь все соответствующие записи из файла поставщиков.

Если доля поставщиков из Ростова по отношению к их общему количеству достаточно мала, вторая стратегия будет значительно эффективнее первой. Это связано с тем, что, во-первых, СУБД известна физическая последовательность записей в файле городов, и поиск будет прекращен после извлечения следующего за Ростовом названия города. Во-вторых, даже если придется просмотреть файл городов полностью, для такого поиска потребуется гораздо меньше операций ввода вывода, поскольку физический размер файла городов меньше, чем размер файла поставщиков из-за меньшего размера записей (он будет занимать меньшее число страниц).

В рассматриваемом примере файл городов называется индексным файломилииндексомпо отношению к файлу поставщиков, в то время как файл поставщиков называется индексированным файлом по отношению к файлу городов. Индексный файлэто хранимый файл особого типа, в котором каждая запись состоит из двух значенийданных иRIDуказателя. Указатель служит для связывания с соответствующей записью индексированного файла. Индекс можно сравнить с предметным указателем обычной книги, который состоит из списка терминов с указанием номеров страниц (указатели) для облегчения поиска нужной информации.

Использование индексов наряду со значительным ускорением процесса выборки или извлечения данных имеет и существенный недостаток. Это замедление процесса обновления данных, т.к. при каждом добавлении новой записи в индексированный файл потребуется также добавить новый индекс в индексный файл. При выборе некоторого поля для индексирования необходимо выяснить, что более важно для данной СУБД: скорость извлечения данных или скорость обновления?

Индексы можно использовать двумя разными способами. Во-первых, их можно использовать для последовательногодоступа к индексированному файлу в соответствии со значениями индексного поля. Типичным запросом такого использования может служить следующий запрос: «Найти поставщиков из городов, названия которых начинаются с буквы из некоторого диапазона». Во-вторых, индексы могут использоваться дляпрямогодоступа к отдельным записям индексированного файла на основе заданного значения индексного поля. Примером может служить следующий запрос: «Найти поставщиков из списка городов» (например, из Ростова и Азова).

Индексы могут также использоваться для проверки некоторого значения без обращения к индексированному файлу. Примером может служить запрос о наличии поставщиков из определенного города. Результатом выполнения такого запроса будет служить ответ «Да» или «Нет».

Хранимый файл может иметь несколько индексов (например, ГОРОД и СКИДКА). Они могут использоваться как раздельно, так и совместно для более эффективного доступа к записям о поставщиках. Рассмотрим, например, такой запрос: «Найти поставщиков из Таганрога со скидкой 30%». Согласно индексу ГОРОД будут найдены записи с RIDуказателямиr2 иr3, а согласно индексу СКИДКАзаписи сRIDуказателями r3 и r5. Теперь на основе сравнения этих двух наборов выясняется, что условиям запроса удовлетворяет только запись с данными о поставщике r3, и только после этого в СУБД будет организован доступ к файлу поставщиков и извлечена нужная запись.

Индексы часто называют инвертированными списками. Файл с индексами по каждому полю иногда называетсяполностью инвертированным.

Индекс можно создать также на основе комбинации двух полей (ГОРОД и СКИДКА). Тогда предыдущий запрос о поставщике со скидкой 30% будет выполнен с помощью однократного просмотра индексного файла, а не с помощью двух отдельных просмотров, как в предыдущем примере с использованием двух индексов. Более того, скорость выполнения запроса может сильно зависеть от последовательности выполнения просмотров по двум индексам. К тому же, бывает довольно сложно определить, какой порядок индексов приведет к более быстрому выполнению данного запроса.

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