Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция№30_Индексы в БД.doc
Скачиваний:
15
Добавлен:
04.05.2019
Размер:
140.29 Кб
Скачать

Багаторівневі індекси

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

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

Таблица 1.1 Відомості про поставки товарів в магазин

Номер накладной

Название товара

Артикул

Количество

Дата

поставки

Номер страницы

37

Костюм

500

50

10.12.05

1

54

Сапоги

200

75

10.12.05

2

18

Туфли

100

120

11.12.05

3

60

Костюм

500

35

11.12.05

4

28

Костюм

300

20

12.12.05

5

74

Костюм

400

50

12.12.05

6

80

Туфли

100

100

12.12.05

7

Індекс, створений для поля Название товара, який забезпечує швидкий пошук даних в цьому полі, буде мати вигляд (табл. 1.2):

Таблица 1.2 Индекс Товар

Название товара

Номера страниц

Костюм

1, 4, 5, 6

Сапоги

2

Туфли

3, 7

Пошук та відбір потрібних записів в БД здійснюється в наступній послідовності:

1.   обирається індекс, який відповідає умові пошуку (наприклад, Товар, якщо в запиті виконується пошук товару з конкретною назвою);

2.   в індексі знаходиться рядок с заданою умовою пошуку (наприклад, Туфли);

3.   з рядка, який був знайдений, обираються номери сторінок, де зберігаються іскомі записи;

4.   отримані номери сторінок використовуються для читання необхідної інформації.

Більшість СКБД реалізують цей процес автоматично, без участі користувача.

Якщо для таблиці визначено декілька індексів за окремими полями, то при пошуку записів в даній таблиці за умовами пошуку, заданими в цих полях, використовуються сумісно. Наприклад, для поля Дата поставки табл. 1.1 створений також індекс Дата (табл. 1.3):

Таблица 1.3 Индекс Дата

Дата поставки

Номера страниц

10.12.05

1, 2

11.12.05

3, 4

12.12.05

5, 6, 7

При виконанні запита «Знайти відомості про туфлі, які поступили 11 декабря 2005 г», номери сторінок в індексі Товар для значення даних Туфли будуть порівнюватися з номерами сторінок значення 11.12.05 в індексі Дата. В підсумку буде обраний номер сторінки, який зустрічається в обох індексах, який дорівнює 3.

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

Проілюструємо процес створення індексів на прикладі MS Access.

Якщо індекс створюється по одному полю, необхідно виконати такі дії:

1.   відчинити таблицю в режимі Конструктора;

2.   активізувати поле, для якого створюється індекс;

3.   обрати властивість поля Индексированное поле;

4.   обрати для даної властивості одне із значень:

Да (Допускаются совпадения);

Да (Совпадения не допускаются).

Для ключового поля індекс в MS Access створюється автоматично.

Для створення складеного індексу треба відчинити таблицю в режимі Конструктора, натиснути кнопку Индексы на панелі інструментів або виконати дії Вид->Индексы, потім в діалоговому вікні, яке з’явиться, ввести і’мя индексу та вказати імена полів, за якими він створюються.

В MS Access є наступні обмеження:

·      в таблиці не може бути більш ніж 32 індексів;

·      в складеному індексі не може бути більш ніж 10 полів.