Лекции и практики (1). Курс лекций и материалы для практических занятий
Скачать 1.01 Mb.
|
Способы размещения данных и доступа к данным в РБДПри создании новой записи во многих случаях существенно размещение этой записи в памяти, т.к. это оказывает огромное влияние на время выборки. Простейшая стратегия размещения данных заключается в том, что новая запись размещается на первом свободном участке (если ведется учёт свободного про- странства) или вслед за последней из ранее размещённых записей. Среди более сложных методов размещения данных отметим хеширование и кластеризацию. Хеширование заключается в том, что специально подобранная хеш- функция преобразует значение ключа записи в адрес блока (страницы) памяти, в котором эта запись будет размещаться. Под ключом записи здесь подразуме- вается поле или набор полей, позволяющие классифицировать запись. Напри- мер, для таблицы СОТРУДНИКИв качестве ключа записи может выступать поле Номерпаспортаили набор полей (Фамилия, Имя, Дата рождения). Кластеризация – это способ хранения в одной области памяти таблиц, связанных внешними ключами (одна родительская таблица, одна или несколько подчинённых таблиц). Для размещения записей используется значение внешне- го ключа таким образом, чтобы все данные, имеющие одинаковое значение внешнего ключа, размещались в одном блоке данных. Например, для таблиц СОТРУДНИКИ, ДЕТИСОТРУДНИКОВ, ТРУДОВАЯКНИЖКА, ОТПУСКАв качестве внешнего ключа подчинённых таблиц выступает первичный ключ Идентификатор сотрудникатаблицы СОТРУДНИКИ, и тогда при кластериза- ции все данные о каждом сотруднике будут храниться в одном блоке данных. Способы доступа к данным Рассмотрим основные способы доступа к данным: Последовательная обработка области БД. Областью БД может быть файл или другое множество страниц (блоков) памяти. Последовательная обработ- ка предполагает, что система последовательно просматривает страницы, пропускает пустые участки и выдаёт записи в физической последовательно- сти их хранения. Доступ по ключу базы данных (КБД). КБД определяет местоположение записи в памяти ЭВМ. Зная его, система может извлечь нужную запись за одно обращение к памяти. Доступ по ключу (в частности, первичному). Если система обеспечивает доступ по ключу, то этот ключ также может использоваться при запомина- нии записи (для определения места размещения записи в памяти). В базах данных применяются такие способы доступа по ключу, как индексирование, хеширование и кластеризация. Примечание: в иерархических и сетевых СУБД есть ещё доступ по структуре. Эта разно- видность доступа применяется для групповых отношений и позволяет перейти к предыдущему или следующему экземпляру группового отношения, к экземпляру- владельцу группового отношения или к списку подчинённых экземпляров. Индексирование данных Определим индексирование как способ доступа к данным в реляционной таблице с помощью специальной структуры – индекса. Индекс – это структура, которая определяет соответствие значения клю- ча записи (атрибута или группы атрибутов) и местоположения этой записи – КБД (рис. 5.3). Каждый индекс связан с определённой таблицей, но является внешним по отношению к таблице и обычно хранится отдельно от неё. Индекс Пространство памяти
F6:00 F6:1E F6:31
… FA:00 FA:1D FA:2B Рис. 5.3. Пример индекса Индекс обычно хранится в отдельном файле или отдельной области па- мяти. Пустые значения атрибутов (NULL) не индексируются. Индексирование используется для ускорения доступа к записям по значе- нию ключа и не влияет на размещение данных этой таблицы. Ускорение поиска данных через индекс обеспечивается за счёт: упорядочивания значений индексируемого атрибута. Это позволяет про- сматривать в среднем половину индекса при линейном поиске; индекс занимает меньше страниц памяти, чем сама таблица, поэтому систе- ма тратит меньше времени на чтение индекса, чем на чтение таблицы. Индексы поддерживаются динамически, т.е. после обновления таблицы – добавления или удаления записей, а также модификации индексируемых полей, индекс приводится в соответствие с последней версией данных таблицы. Об- новление индекса, естественно, занимает некоторое время (иногда, очень боль- шое), поэтому существование многих индексов может замедлить работу БД. Примечание: в реальных СУБД существуют методы оптимизации переиндексации. Напри- мер, при выполнении пакетной операции модификации БД обновление индексов мо- жет происходить один раз после внесения всех изменений в данные. Обращение к записи таблицы через индексы осуществляется в два этапа: сначала СУБД считывает индекс в оперативную память (ОП) и находит в нём требуемое значение атрибута и соответствующий адрес записи (КБД), затем по этому адресу происходит обращение к внешнему запоминающему устройству. Индекс загружается в ОП целиком или хранится в ней постоянно во время ра- боты с таблицей БД, если хватает объёма ОП. Индекс называется первичным, если каждому значению индекса соответ- ствует уникальное значение ключа. Индекс по ключу, допускающему дублика- ты значений, называется вторичным. Большинство СУБД автоматически стро- ят индекс по первичному ключу и по уникальным столбцам. Эти индексы ис- пользуются для проверки ограничения целостности unique(уникальность). Для каждой таблицы можно одновременно иметь несколько первичных и вторичных индексов, что также относится к достоинствам индексирования. Различают индексы по одному полю и по нескольким (составные). Со- ставной индекс включает два или более столбца одной таблицы (рис. 5.4). По- следовательность вхождения столбцов в индекс определяется при его создании. Из примера на рис. 5.4 видно, что данные в индексе отсортированы по первому столбцу (ID), внутри группы с одинаковыми значениями ID – отсортированы по второму столбцу (EDATE), а внутри группы с одинаковыми значениями ID и EDATE – по третьему столбцу (CODE).
Рис. 5.4. Пример составного индекса |