- Індексування використовується для оптимізації продуктивності бази даних шляхом мінімізації кількості звернень до диска, необхідних під час обробки запиту.
- Індекс є типом структури даних. Він використовується для швидкого пошуку та доступу до даних у таблиці бази даних.
Структура індексу:
Індекси можна створювати за допомогою деяких стовпців бази даних.
- Перший стовпець бази даних — це ключ пошуку, який містить копію первинного ключа або ключа-кандидата таблиці. Значення первинного ключа зберігаються в сортованому порядку, щоб можна було легко отримати доступ до відповідних даних.
- Другий стовпець бази даних - це посилання на дані. Він містить набір покажчиків, що містять адресу блоку диска, де можна знайти значення певного ключа.
Методи індексування
Впорядковані індекси
Індекси зазвичай сортуються, щоб пришвидшити пошук. Індекси, які сортуються, називаються впорядкованими індексами.
приклад : Припустімо, у нас є таблиця співробітників із тисячами записів, кожна з яких має довжину 10 байтів. Якщо їхні ідентифікатори починаються з 1, 2, 3.... і так далі, і ми повинні шукати студента з ID-543.
- У випадку бази даних без індексу ми повинні шукати дисковий блок від початку до досягнення 543. СУБД прочитає запис після прочитання 543*10=5430 байт.
- У випадку індексу ми будемо шукати за допомогою індексів, і СУБД прочитає запис після прочитання 542*2= 1084 байтів, що набагато менше порівняно з попереднім випадком.
Первинний індекс
- Якщо індекс створюється на основі первинного ключа таблиці, то це називається первинним індексуванням. Ці первинні ключі унікальні для кожного запису та містять відношення 1:1 між записами.
- Оскільки первинні ключі зберігаються в сортованому порядку, виконання операції пошуку є досить ефективним.
- Основний індекс можна класифікувати на два типи: щільний індекс і розріджений індекс.
Щільний індекс
- Щільний індекс містить запис індексу для кожного значення ключа пошуку у файлі даних. Це робить пошук швидшим.
- У цьому випадку кількість записів в індексній таблиці така сама, як кількість записів у основній таблиці.
- Йому потрібно більше місця для зберігання самого запису індексу. Записи індексу мають ключ пошуку та вказівник на фактичний запис на диску.
Розріджений індекс
- У файлі даних індексний запис відображається лише для кількох елементів. Кожен елемент вказує на блок.
- У цьому випадку замість того, щоб вказувати на кожен запис у головній таблиці, індекс вказує на записи в головній таблиці в проміжку.
Індекс кластеризації
- Кластерний індекс можна визначити як упорядкований файл даних. Іноді індекс створюється на стовпцях неосновного ключа, які можуть бути не унікальними для кожного запису.
- У цьому випадку, щоб швидше ідентифікувати запис, ми згрупуємо два або більше стовпців, щоб отримати унікальне значення та створити з них індекс. Цей метод називається індексом кластеризації.
- Записи, які мають схожі характеристики, групуються, і для цих груп створюються індекси.
приклад : припустимо, що компанія має кілька співробітників у кожному відділі. Припустімо, ми використовуємо індекс кластеризації, де всі співробітники, які належать до одного Dept_ID, розглядаються в межах одного кластера, а покажчики індексу вказують на кластер загалом. Тут Dept_Id є неунікальним ключем.
Попередня схема трохи збиває з пантелику, оскільки один блок диска спільно використовується записами, які належать до іншого кластера. Якщо ми використовуємо окремий дисковий блок для окремих кластерів, то це називається кращою технікою.
Вторинний індекс
У розрідженому індексуванні зі збільшенням розміру таблиці зростає і розмір відображення. Ці відображення зазвичай зберігаються в первинній пам'яті, щоб вибірка адреси була швидшою. Потім вторинна пам'ять шукає фактичні дані на основі адреси, отриманої від відображення. Якщо розмір відображення зростає, то отримання самої адреси стає повільнішим. У цьому випадку розріджений індекс не буде ефективним. Щоб подолати цю проблему, введено вторинне індексування.
У вторинному індексуванні, щоб зменшити розмір відображення, вводиться інший рівень індексування. У цьому методі спочатку вибирається величезний діапазон для стовпців, щоб розмір відображення першого рівня став малим. Потім кожен діапазон далі ділиться на менші діапазони. Відображення першого рівня зберігається в первинній пам'яті, тому вибірка адреси відбувається швидше. Відображення другого рівня і фактичні дані зберігаються у вторинній пам'яті (жорсткому диску).
Наприклад:
- Якщо ви хочете знайти на діаграмі запис кидка 111, він шукатиме найвищий запис, який менший або дорівнює 111 в індексі першого рівня. На цьому рівні він отримає 100.
- Потім на другому рівні індексу знову макс. (111)<= 111 and gets 110. now using the address 110, it goes to data block starts searching each record till 111. < li>
- Так виконується пошук у цьому методі. Вставлення, оновлення або видалення також виконується таким же чином. =>