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

А) плотный индекс; б) разреженный индекс.

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

Вторичные индексы

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

• Создание плотного вторичного индекса, который соответствует всем записям файла данных, но при этом в нем допускается наличие дубликатов.

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

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

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

Многоуровневые индексы

При возрастании размера индексного файла и расширении его содержимого на большое количество страниц время поиска нужного индекса также значительно возрастает. Например, при использовании метода бинарного поиска требуется выполнить приблизительно log2P операций доступа к индексу с р страницами. Обратившись к многоуровневому индексу, можно попробовать решить эту проблему путем сокращения диапазона поиска. Данная операция выполняется над индексом аналогично тому, как это делается в случае файлов другого типа, т.е. посредством расщепления индекса на несколько субиндексов меньшего размера и создания индекса для этих субиндексов. На рис. 26 показан пример двухуровневого частичного индекса для таблицы Staff. На каждой странице файла данных могут храниться две записи. Кроме того, в качестве иллюстрации здесь показано, что на каждой странице индекса также хранятся две индексные записи, но на практике на каждой такой странице может храниться намного больше индексных записей. Каждая индексная запись содержит значение ключа доступа и адрес страницы. Хранимое значение ключа доступа является наибольшим на адресуемой странице.

Поиск записи по заданному значению атрибута No (например, SG14) начинается с индекса второго уровня, котором отыскивается первая страница, у которой значение последнего ключа доступа больше или равно SG14. В данном случае значение последнего ключа равно SG37. Найденная запись содержит адрес страницы индекса первого уровня, в которой следует продолжить поиск. Повторяя описанный процесс, мы попадем на страницу 2 файла данных, где и находится искомая запись. Для поиска записей с указанием некоторого диапазона значений атрибута staffNo можно использовать этот процесс, чтобы обнаружить первую запись в файле данных, которая соответствует самому меньшему значению диапазона. Поскольку все записи в файле данных отсортированы по полю в staffNo, остальные записи могут быть найдены с помощью последовательного чтения файла данных от первой до последней записи из этого диапазона.

Метод ISAM компании IBM построен на использовании двухуровневой индексной структуры. Операции вставки в нем обрабатываются с помощью страниц переполнения. Как правило, можно использовать л-уровневую индексную структуру произвольной глубины, но на практике обычно ограничиваются не более чем тремя уровнями, поскольку большее количество уровней требуется только для исключительно больших файлов. В следующем разделе рассматривается особый тип многоуровневого плотного индекса - усовершенствованные сбалансированные древовидны,, индексы,

Рис.26. Пример многоуровневого индекса

116