- •Основные понятия информационных систем Информация и субд
- •Файловые системы
- •Структуры файлов
- •Именование файлов
- •Области применения файлов
- •Потребности информационных систем
- •Структуры хранения данных и методы доступа к ним
- •Доступ к базе данных
- •Диспетчер дисков
- •Диспетчер файлов
- •Кластеризация
- •Наборы страниц и файлы
- •Индексирование
- •Плотное и неплотное индексирование
- •Структура типа б-дерева
- •Хеширование
- •Задание
- •Расширяемое хеширование
- •Цепочки указателей
- •Управление данными, размещенными в оперативной памяти
- •Функции и архитектура субд
- •Примеры приложений субд
- •Обзор основных компонентов субд
- •Диспетчер памяти
- •Процессор запросов
- •Диспетчер транзакций
- •Параллелизм
- •Задание. Привести схему применения двухфазной блокировки для решения проблемы незафиксированной зависимости и проблемы несовместимого анализа.
- •Журнализация
- •Поддержка языков бд
- •Типовая организация современной субд
- •Ранние подходы к организации бд
- •Основные особенности систем, основанных на инвертированных списках
- •Структуры данных
- •Манипулирование данными
- •Ограничения целостности
- •Иерархические системы
- •Иерархические структуры данных
- •Манипулирование данными
- •Ограничения целостности
- •Сетевые системы
- •Сетевые структуры данных
- •Манипулирование данными сетевой схемы
- •Ограничения целостности сетевых систем
- •Достоинства и недостатки
- •Реляционные базы данных Общие понятия и терминология реляционного подхода
- •Тип данных
- •Фундаментальные свойства отношений (таблиц)
- •Реляционная модель
- •Каталог
- •Базовые таблицы, представления, снимки и запросы
- •Отношения и предикаты
- •Null-значения; потенциальные и внешние ключи
- •Базисные операции над реляционными данными
- •5.1. Реляционная алгебра
- •5.1.1. Общая интерпретация реляционных операций
- •Замкнутость реляционной алгебры и операция переименования
- •Особенности теоретико-множественных операций реляционной алгебры
- •Специальные реляционные операции
- •Операция взятия проекции
- •Операция соединения отношений
- •Операция деления отношений
- •Упражнения
- •Задание
- •Операция расширения и подведения итогов
- •Операция подведения итогов
- •Задания
- •Операторы обновления
- •Упражнения по запросам
- •5.2. Реляционное исчисление
- •Кортежные переменные и правильно построенные формулы
- •Еще раз о свободных и связанных переменных
- •Целевые списки и выражения реляционного исчисления
- •Реляционное исчисление доменов
- •Список литературы
Индексирование
Рассмотрим в качестве примера данные о поставщиках, а также важный запрос типа «Найти всех поставщиков из города С». При этом администратор базы данных может выбрать способ сохранения данных, схематически показанный на рис.3. он основан на двух хранимых файлах: файле с данными о поставщиках и файле с данными о городах. Предполагается, что в файле городов используется алфавитное упорядочение по полю ГОРОД с RID-указателями на соответствующие записи в файле поставщиков.
Файл городов (индекс) Файл поставщиков (данные)
|
|
|
Номер |
Фамилия |
Скидка |
Город |
Азов |
|
|
S1 |
Иванов |
20 |
Ростов |
Ростов |
|
|
S2 |
Петров |
10 |
Таганрог |
Ростов |
|
|
S3 |
Сидоров |
30 |
Таганрог |
Таганрог |
|
|
S4 |
Федоров |
20 |
Ростов |
Таганрог |
|
|
S5 |
Аверьянов |
30 |
Азов |
Рис.3. Индексирование файла по полю ГОРОД файла городов
Для поиска поставщиков из Ростова можно применить следующие стратегии.
Найти весь файл поставщиков, найти все записи, для которых названием города является строка Ростов.
Найти файл городов со строкой Ростов, а затем согласно указателям извлечь все соответствующие записи из файла поставщиков.
Если доля поставщиков из Ростова по отношению к их общему количеству достаточно мала, вторая стратегия будет значительно эффективнее первой. Это связано с тем, что, во-первых, СУБД известна физическая последовательность записей в файле городов, и поиск будет прекращен после извлечения следующего за Ростовом названия города. Во-вторых, даже если придется просмотреть файл городов полностью, для такого поиска потребуется гораздо меньше операций ввода вывода, поскольку физический размер файла городов меньше, чем размер файла поставщиков из-за меньшего размера записей (он будет занимать меньшее число страниц).
В рассматриваемом примере файл городов называется индексным файломилииндексомпо отношению к файлу поставщиков, в то время как файл поставщиков называется индексированным файлом по отношению к файлу городов. Индексный файлэто хранимый файл особого типа, в котором каждая запись состоит из двух значенийданных иRIDуказателя. Указатель служит для связывания с соответствующей записью индексированного файла. Индекс можно сравнить с предметным указателем обычной книги, который состоит из списка терминов с указанием номеров страниц (указатели) для облегчения поиска нужной информации.
Использование индексов наряду со значительным ускорением процесса выборки или извлечения данных имеет и существенный недостаток. Это замедление процесса обновления данных, т.к. при каждом добавлении новой записи в индексированный файл потребуется также добавить новый индекс в индексный файл. При выборе некоторого поля для индексирования необходимо выяснить, что более важно для данной СУБД: скорость извлечения данных или скорость обновления?
Индексы можно использовать двумя разными способами. Во-первых, их можно использовать для последовательногодоступа к индексированному файлу в соответствии со значениями индексного поля. Типичным запросом такого использования может служить следующий запрос: «Найти поставщиков из городов, названия которых начинаются с буквы из некоторого диапазона». Во-вторых, индексы могут использоваться дляпрямогодоступа к отдельным записям индексированного файла на основе заданного значения индексного поля. Примером может служить следующий запрос: «Найти поставщиков из списка городов» (например, из Ростова и Азова).
Индексы могут также использоваться для проверки некоторого значения без обращения к индексированному файлу. Примером может служить запрос о наличии поставщиков из определенного города. Результатом выполнения такого запроса будет служить ответ «Да» или «Нет».
Хранимый файл может иметь несколько индексов (например, ГОРОД и СКИДКА). Они могут использоваться как раздельно, так и совместно для более эффективного доступа к записям о поставщиках. Рассмотрим, например, такой запрос: «Найти поставщиков из Таганрога со скидкой 30%». Согласно индексу ГОРОД будут найдены записи с RIDуказателямиr2 иr3, а согласно индексу СКИДКАзаписи сRIDуказателями r3 и r5. Теперь на основе сравнения этих двух наборов выясняется, что условиям запроса удовлетворяет только запись с данными о поставщике r3, и только после этого в СУБД будет организован доступ к файлу поставщиков и извлечена нужная запись.
Индексы часто называют инвертированными списками. Файл с индексами по каждому полю иногда называетсяполностью инвертированным.
Индекс можно создать также на основе комбинации двух полей (ГОРОД и СКИДКА). Тогда предыдущий запрос о поставщике со скидкой 30% будет выполнен с помощью однократного просмотра индексного файла, а не с помощью двух отдельных просмотров, как в предыдущем примере с использованием двух индексов. Более того, скорость выполнения запроса может сильно зависеть от последовательности выполнения просмотров по двум индексам. К тому же, бывает довольно сложно определить, какой порядок индексов приведет к более быстрому выполнению данного запроса.
Индекс на основе комбинации полей может использоваться либо для отдельного индексирования по первому полю, либо по любой последовательной комбинации первых полей.