Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000259.doc
Скачиваний:
27
Добавлен:
30.04.2022
Размер:
1.27 Mб
Скачать

5.5. Инвертированные списки

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

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

Инвертированный список в общем случае – это двухуровневая индексная структура. Здесь на первом уровне находится файл или часть файла, в которой упорядоченно расположены значения вторичных ключей. Каждая запись с вторичным ключом имеет ссылку на номер первого блока в цепочке блоков, содержащих номера записей с заданным значением вторичного ключа. На втором уровне находится цепочка блоков, содержащих номера записей, имеющих одно и то же значение вторичного ключа. При этом блоки второго уровня упорядочены по значениям вторичного ключа. И наконец, на третьем уровне находится собственно основной файл.

Механизм доступа к записям по вторичному ключу при подобной организации состоит в следующем:

- на первом шаге в области первого уровня ищут заданное значение вторичного ключа;

- на втором шаге по ссылке считывают блоки второго уровня, содержащие номера записей с заданным значением вторичного ключа;

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

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

Рассмотрим модификацию основного файла. При модификации основного файла происходит следующее:

- изменяется запись основного файла;

- исключается старая ссылка на предыдущее значение вторичного ключа;

- добавляется новая ссылка на новое значение вторичного ключа.

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

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

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