Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
база данных.docx
Скачиваний:
167
Добавлен:
24.03.2015
Размер:
5.83 Mб
Скачать

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

Как отмечалось выше, определение ключа для таблицы означает авто­матическую сортировку записей, контроль отсутствия повторений значе­ний в ключевых полях записей и повышение скорости выполнения опера ций поиска в таблице. Для реализации этих функций в СУБД применяют индексирование.

Термин «индекс» тесно связан с понятием «ключ», хотя между ними есть и некоторое от личие.

Под индексомпонимают средство ускоренииоперации поиска записей в таблице, а следовательно, и аругих операций, использующих поиск: извле­чение, модификация, сортировка и т. д. Таблицу, для которой используется индекс, называют индексированной

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

Ьариан гы решения проблемы организации физического доступа к инфор­мации зависят в основном от следующих факторов.

  • вида содержимого в поле ключа записей индексного фай ла;

  • типа используемых ссылок (указателей) на запись основной таблицы;

  • метода поиска нужных записей

В поле ключа индексного файламожно хранить значения ключевых по­лей индексируемой таблицы либо свертку ключа (так называемый хеш- код). Преимущество хранения хеш-кода вместо значения состоит в том, что длина свертки независимо от длины исходного значения ключевого поля всегда имеет некоторую постоянную и достаточно матую величину (например, 4 байта), что существенноснижав! время поисковых опера­ций. Недостатком хеширования является необходимость выполнения операции свертки (требует определенного времени), а также борьба с воз­никновением коллизий (свертка различных значений может дать одина­ковый хеш-код).

Для организации ссылкина запись таблицы могут использоваться три типа адресов: абсолютный (действительный), относительный и символический ( идентифика! ор).

На практике чаще всего используются два метода поиска: последователь­ный и бинарный (основан на делении интервала поиска пополам).

Проиллюс грируем организацию индексировяния таблиц двумясхемами: одноуровневой и двухуровневой. При этом примем ряд предположений, обыч­но выполняемых в современных вычислительны^ системах. Пусть ОС под­держиваетпрямую организацию данных на магнитных диска::, основныетаб­лицы и индексные файлы хранятся в отдельных файлах. Информация файлов хранится в виде совокупности блоков фиксированного размера, например целого числа кластеров.

При одноуровневой схемев индексном файле хрэнлтея короткие запи­си, имеющие два поля: поле содержимого старшего ключа (хеш-кода клю­ча) адресуемого блока и поле адреса начала этого блока (рис. 3.3).

ключ

адрес

ключ

адрес

ключ

адрес

Индексный файл

ключ заш сь

ключ

ключ запись

запись

ключ запись

ключ запись

ключ запись

II ч

запись

_ключ

запись

__ключ

запись

Блок — N

Блок — 2

Блок — 1

Рис. 3.3. Одноуровневая схема индексации

В каждом блоке записи располагаются в порядке возрастания значения ключа или свертки. Старшим ключом каждого блока является ключ его последней записи.

Если в индексном файле хранятся хеш-коды ключевых полей индекс иро ванной таблицы, то алгоритм поиска нужной записи (с указанным ключом) в таблице включает в себя следующие три этана

  1. Образование сверл ки значе ния ключевого поля искомой запчеи.

  2. Поиск в индексном файле записи о блоке, значение первого поля кото­рою больше полученной свертки (это гарантирует нахождение искомой свертки в этом блоке).

  3. Последовательный птюсмотр записей блока до совпадения сверток искомой "аписи и записи блока файла В случае ко. шизий сверюк ищетсязапись, значе­ние ключа которой совпадает со значением ключа искомой записи

Основным недостаткомодноуровневой схемы является то, чю ключи (< вертки) запи< ей хранятся вмегте с записями. Это приводит к уве личению времени поиска записей из-за большой длины просмо гра (значения данньп в записях приходится пропускать).

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

Блок ключей — 1

Рис. 3.4. Двухуровневая схемг индексации

В этой схеме индекс основной таблицы распределен но совокупности файлов: одному файлу главного индекса и множеству файлов с блоками ключей.

На практике для создан* я индекса для некоторой таблицы БД пользова тель указывает поле таблицы, которое требует индексации. Ключевые поля таблицы во многих СУБД как правило индексируются автоматически. Ин­дексные файлы, создаваемые по ключевым полям таблицы, часто называют­ся файлами перзичных индексов.

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

С^язь вторичного индекса с элементами данных базы может быть уста новл^на различными способами. Один из них - использование вторичного индекса как входа для получения первичного ключа, по которому затем с использованием первичного индекса производится поиск необходимых за­писей (рис. 3.5).

Рис. 3.5. Способ использования вторичных индексов

Некоторыми СУБД, например Access, деление индексов на первичные и вторичные не производится. В этом случае используются автоматически со здава< мыс индексы и индексы, определяемые пользователем по любому из нг ключевых полей.

Главная причина повышения скорости ьыполнения различных операций в индексированных таблицах состоит в том, что основная часть рабопы про- изво П1тся с небольшими индексными файлами, а не с самими таблицами. Наибольший эффект повышения производительности работы с индексиро ванными таблицами достигается для значительных по объему таблиц. Ин­дексирование требует небольшого дополнительного места на диске и незна­чительных затрат процессора на изменение индексов в процессе работы. Индексы в общем случае мо\ут изменяться перед выполнением запросов к ЬД, после выполнения запросов к БД, по специальным командам пользова­теля или программным вызовам приложений