Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
03_Пособие.doc
Скачиваний:
20
Добавлен:
01.05.2025
Размер:
1.78 Mб
Скачать

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

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

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

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

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

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

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

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

На рис. 5.6 представлен пример инвертированного списка, составленного для вторичного ключа Шифр группы. Для более наглядного представления ограничим размер блока пятью записями.

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

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

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

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

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

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

1 уровень

II уровень

Ключ

Номер блока

Блок 1

Номер записи

Фамилия

Шифр группы

АИ41

1

1

1

Арнаутов А.

АИ41

АИ42

2

3

2

Васильев А.

АИ42

4

3

Баландин М.

АИ41

6

4

Бережной К.

АИ41

10

5

Гармашов Р.

АИ42

6

Духанин А.

АИ41

Блок 2

7

Трухачев А.

АИ42

2

8

Кротков А.

АИ42

5

9

Старых И.

АИ42

7

10

Попова А.

АИ41

8

9

Рис 5.6. Построение инвертированного списка по шифру группы

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

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