Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Чичкань.docx
Скачиваний:
6
Добавлен:
01.05.2025
Размер:
2.15 Mб
Скачать
        1. 9.4.3. Використання індексів (індексування)

Як уже наголошувалося, впорядкування записів дозволяє використовувати дихотомічний метод пошуку потрібного запису і тим самим істотно скоротити одну з основних складових часу пошуку – кількість звернень до ВП. Проте при цьому виникають проблеми з додаванням записів, пов'язані з необхідністю перезапису частини фізичних записів (зсуву).

Для того, щоб використовувати дихотомічний пошук і не переміщувати фізичні записи при додаванні нових записів, використовується так зване логічне впорядкування фізичних записів (індексування). Основна структура зберігання містить записи вихідної таблиці і представлена у вигляді неврегульованої послідовності фізичних записів (див. п. 5.4.1). Для можливої реалізації дихотомічного пошуку по певному ключу створюється додаткова структура зберігання (так званий індекс). Кількість записів в індексі дорівнює кількості записів вихідної таблиці (кількості фізичних записів в основній структурі зберігання). Кожен запис індексу має два поля: ключове поле запису основної структури і покажчик – адреса запису основної структури з відповідним значенням ключа.

Записи індексу (індексного файлу) впорядковані за значенням ключа. Адреси зв'язку цих записів визначають логічне впорядкування записів основної структури зберігання. Приклад відповідної структури зберігання наводиться (при припущенні k=1) на мал. 9.6.

Дану структуру зберігання називають ще інвертованим списком. Сенс цього терміну полягає в наступному. Можна було б упорядкувати записи основної структури зберігання, не переставляючи їх, а об'єднавши у відповідний впорядкований список. У нашому випадку адреси зв'язку як би віддаляються із списку і включаються до складу файлу-індексу (інвертуються). Тому отримана структура інтерпретується як інвертований список.

Мал. 9.6.  Індексування

Пошук потрібного запису по заданому значенню ключа здійснюється в індексному файлі методом половинного ділення. Відмітимо, що оскільки записи індексу містять всього два поля, сумарний об'єм записів індексу невеликий, тому індекс, як правило, цілком прочитується для обробки в ОП за одне звернення до ВП. Після того, як в індексному файлі виявлений шуканий запис, за адресою зв'язку читається повний відповідний запис основної структури зберігання. Якщо необхідний пошук по іншому ключу, будується ще один індекс по відповідному ключу. Таким чином, по будь-якому ключу пошук можна здійснювати дихотомічним методом.

Оцінимо кількість звернень до ВП при реалізації елементарних операцій. Відповідні оцінки зроблені для випадку, коли фізичний запис складається з одного логічного запису (коефіцієнт блокування k рівний 1). Розрахунок оцінок для довільного k проводиться по аналогії з розрахунками пп. 9.4.1–9.4.2.

          1. Пошук запису із заданим значенням ключа

Із ВП читається індексний файл (кількість звернень до ВП для цього залежить від об'єму індексного файлу, як правило, є невеликою і багато меншою кількості записів N). Після знаходження потрібного запису в індексному файлі читається відповідний запис основного файлу (одне звернення до ВП).

          1. Читання запису

В ході операції пошуку шуканий запис зчитаний в ОП.

          1. Коректування запису

Зчитаний запис коректується і заноситься на своє місце (ще одне звернення до ВП).

          1. Видалення запису

Знайдений запис позначається як видалений в основному файлі, відповідний запис в індексному файлі видаляється, змінений індекс записується у ВП. Кількість звернень до ВП у цьому випадку в порівнянні з кількістю звернень до ВП при пошуку збільшується на два.

          1. Додавання запису

Запис, що додається, заноситься в кінець основного файлу. Формується новий запис індексу, відповідний запису, що додається. Записи індексу переупорядковуються по значеннях ключа, і індекс заноситься у ВП. Кількість звернень до ВП в цьому випадку, в основному, визначається читанням-записуванням індексу.

Таким чином, використання індексів дозволяє ціною деякого збільшення об'єму використовуваної пам'яті (за рахунок індексу) істотно скоротити час реалізації основних операцій. У зв'язку з цим індексування використовується в багатьох сучасних СУБД.

        1. 9.4.4. В-дерево

Структура В-дерева (збалансоване дерево) є наслідком подальшого розширення концепції використання індексів (будується індекс над індексом) і є багаторівневими індексами.

В-дерево будується таким чином. Послідовність записів, відповідна записам вихідної таблиці, упорядковується по значеннях первинного ключа. Логічні записи об'єднуються в блоки (по k записів у блоках).

Значенням ключа блоку є мінімальне значення ключа у записах, що входять у блок. Послідовність блоків є останнім рівнем В-дерева. Будується індекс попереднього рівня. Записи цього рівня містять значення ключа блоку наступного рівня і покажчик-адресу зв'язку відповідного блоку; записи цього рівня також об'єднуються у блоки (по k записів). Потім аналогічно будується індекс більш високого рівня і так далі, поки кількість записів індексу на певному рівні буде не більший k.

Розглянемо процедуру роботи з B-деревом на прикладі. Нехай є файл екземплярів логічних записів, ключі яких набувають значень 2, 7, 8, 12, 15, 27, 28, 40, 43, 50. Для визначеності візьмемо k=2 (у блок об'єднуємо по 2 екземпляри записів). Побудоване для цього прикладу В-дерево зображене на мал. 9.7 (для спрощення малюнка на рівні 4 представлені лише ключі логічних записів і не представлені значення інших полів цих записів).

Мал. 9.7.  В-дерево

У блоках вказано значення ключа відповідного блоку. Значення k прийнято рівним 2.

За побудовою В-дерева всі вихідні записи знаходяться на одній відстані від верхнього індексу (дерево є збалансованим).

Розглянемо реалізацію основних операцій.