Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Белобжеский_Лекции_по_ББД.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
5.5 Mб
Скачать

Индексы

Третий тип данных, которые хранятся в базе данных, призван улучшить ее про­изводительность и доступность. Эти данные, называемые иногда избыточными данными (overhead data), состоят главным образом из индексов (indexes), хотя в ряде случаев используются и другие структуры данных, такие как связанные списки (индексы и связанные списки обсуждаются в приложении А).

В табл. 2.2 приведены данные о студентах и два индекса к ней. Чтобы уяс­нить, какая может быть польза от индексов, представьте себе, что данные в таб­лице СТУДЕНТ расположены в порядке возрастания значения поля НомерСтудента, а пользователь хотел бы создать из этих данных отчет, отсортированный по по­лю Фамилия. Для этого можно было бы извлечь все данные из таблицы и отсор­тировать, но, если размеры таблицы не слишком малы, этот процесс может за­нять много времени. В качестве альтернативы можно создать индекс Фамилия, приведенный в табл. 2.2. Записи в этом индексе отсортированы по полю Фамилия,

поэтому достаточно считать записи из индекса в порядке следования, чтобы за­тем получать данные из таблицы СТУДЕНТ, отсортированные в нужном порядке.

Таблица 2.2. Примеры индексов:

Таблица СТУДЕНТ (Это исходная таблица СТУДЕНТ.)

НомерСтудента

Имя

Фамилия

Специальность

100

Джеймс

Бейкер

Бухгалтерский учет

200

Мэри

Абернати

Информационные системы

300

Бет

Джексон

Бухгалтерский учет

400

Элдридж

Джонсон

Маркетинг

500

Крис

Тафт

Бухгалтерский учет

600

Джон

Сматерс

Информационные системы

700

Майкл

Джонсон

Бухгалтерский учет

Это 2 таблицы индексов (для Фамилии и для Специальности).

Индекс Фамилия

Фамилия

НомерСтудента

Абернати

200

Бейкер

100

Джонсон

300

Джонсон

400, 700

Сматерс

600

Тафт

500

Индекс Специальность

Специальность НомерСтудента

Бухгалтерский учет 100, 300, 500, 700 Информационные системы 200, 600

Маркетинг 400

Теперь представьте, что требуется получить данные о студентах, отсортиро­ванные по полю Специальность. Опять-таки, можно извлечь эти данные из табли­цы СТУДЕНТ и отсортировать, а можно создать индекс Специальность и использо­вать его, как показано выше.

Индексы используются не только для сортировки, но и для быстрого доступа к данным. Пусть, например, пользователю нужны сведения только о тех студен­тах, чьей специальностью являются информационные системы. Без индекса при­шлось бы проводить поиск по всей таблице. Имея же индекс, можно найти в нем соответствующую запись и использовать ее для нахождения нужных строк в таб­лице. На самом деле, если количество строк невелико, как в таблице СТУДЕНТ, индексы не нужны, но представьте себе таблицу, которая содержит 10 000 или 20 000 строк. В этом случае сортировка или поиск по всей таблице работали бы слишком медленно.

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

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