Главная » SQL, Базы данных » ИНДЕКСАЦИЯ БАЗЫ ДАННЫХ

0

Еще раз рассмотрим данные о поставщиках. Предположим, что одним из самых важных (т.е.  часто выполняемых и поэтому требующих высокой производительности) является запрос:  "Определить всех поставщиков из города с" (где с — формальный параметр). С учетом такого  требования администратор базы данных может выбрать хранимое представление, показанное на  рис. Г.9. В этом представлении применяются два файла —  файл поставщиков  и файл городов  (возможно, определенные в  разных наборах страниц); файл городов, который предполагается  хранить в последовательности городов (поскольку CITY — первичный ключ), включает  указатели (идентификаторы записей) на файл поставщиков. Теперь, чтобы определить всех  поставщиков (скажем) из Лондона, в СУБД можно применить одну из двух стратегий, описанных ниже.

Рис. Г.9. Индексация файла поставщиков по атрибуту CITY

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

равно London.

2.              Найти в файле городов элементы со значением London и после обнаружения каждого такого элемента перейти по указателю к соответствующей записи в файле поставщиков.

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

В  данном  примере  файл  городов  может  рассматриваться  как  индекс  ("индекс  CITY")  к  файлу поставщиков; равным образом эту мысль можно выразить так, что файл поставщиков проиндексирован с помощью файла городов. Таким образом, индекс представляет собой файл  особого рода. А именно, индекс — это файл, каждый элемент (т.е. каждая запись) которого  состоит точно из двух значений: значения  данных  и  указателя  (идентификатора  записи);   значением  данных  является  значение некоторого поля индексированного файла, а указатель определяет запись в этом файле, имеющую такое же значение этого же поля. Соответствующее  поле индексированного файла называют индексированным полем или иногда ключом индекса (но автор не использует последний термин).

Примечание. Индексы получили такое название по аналогии с обычными индексами  (предметными указателями), предусмотренными в книгах, которые также состоят из элементов,  содержащих "указатели" (номера страниц), для облегчения процесса выборки информации из  "индексированного файла" (т.е. из основного объема книги). Но следует отметить, что, в отличие от индекса CITY, показанного на рис. Г.9, предметные указатели являются иерархически сжатыми (т.е. элементы обычно содержат ссылки на несколько номеров страниц, а не только на один номер). См. раздел Г.7.

Дополнительная терминология. Индекс  на  первичном ключе  (например, в  случае  поставщиков индекс на поле S#) иногда называют первичным индексом. Индекс на любом другом  поле (т.е. в данном примере индекс CITY) иногда называют вторичным индексом. Кроме того, индекс на первичном ключе или, вообще говоря, на любом потенциальном ключе часто называют уникальным индексом.

Источник: Дейт К. Дж., Введение в системы баз данных, 8-е издание.: Пер. с англ. — М.: Издательский дом «Вильямс», 2005. — 1328 с.: ил. — Парал. тит. англ.

По теме:

  • Комментарии