Індексування покращує продуктивність бази даних за рахунок мінімізації кількості відвідувань диска, необхідних для виконання запиту. Це метод структури даних, який використовується для пошуку та швидкого доступу до даних у базах даних. Кілька полів бази даних використовуються для створення індексів. Основний ключ або ключ-кандидат таблиці дублюється в першому стовпці, який є ключем пошуку. Щоб прискорити пошук даних, значення також зберігаються в порядку сортування. Слід підкреслити, що сортувати дані не потрібно. Другий стовпець — це посилання на дані або покажчик, який містить набір покажчиків, що містять адресу блоку диска, де можна знайти значення конкретного ключа.
Структура індексу в базі даних
Атрибути індексування
- Типи доступу: Це стосується типу доступу, наприклад пошуку на основі значень, доступу діапазону тощо.
- Час доступу: Він відноситься до часу, необхідного для пошуку певного елемента даних або набору елементів.
- Час вставки: Це стосується часу, необхідного для пошуку відповідного місця та вставки нових даних.
- Час видалення: Час, витрачений на пошук елемента та його видалення, а також оновлення структури індексу.
- Космічні накладні витрати: Це стосується додаткового простору, необхідного для індексу.
Структура індексу в базі даних
Загалом існує два типи механізмів організації файлів, які супроводжуються методами індексування для зберігання даних:
Послідовна організація файлів або файл упорядкованого індексу
У цьому випадку індекси базуються на впорядкованому порядку значень. Це, як правило, швидкісні та більш традиційні типи механізмів зберігання. Ці впорядковані або послідовні організації файлів можуть зберігати дані в щільному або розрідженому форматі.
- Щільний індекс
- Для кожного значення ключа пошуку у файлі даних існує запис індексу.
- Цей запис містить ключ пошуку, а також посилання на перший запис даних із цим значенням ключа пошуку.
Щільний індекс
- Розріджений індекс
- Запис індексу відображається лише для кількох елементів у файлі даних. Кожен елемент вказує на блок, як показано.
- Щоб знайти запис, ми знаходимо запис індексу з найбільшим значенням ключа пошуку, меншим або рівним значенню ключа пошуку, який ми шукаємо.
- Ми починаємо з того запису, на який вказує запис індексу, і продовжуємо разом із покажчиками у файлі (тобто послідовно), доки не знайдемо потрібний запис.
- Кількість необхідних доступів=log₂(n)+1, (тут n=кількість блоків, отриманих індексним файлом)
Розріджений індекс
Організація хеш-файлів
Індекси базуються на рівномірному розподілі значень у діапазоні сегментів. Відра, яким присвоюється значення, визначаються функцією, що називається хеш-функцією. В основному існує три способи індексації:
- Кластерне індексування : якщо в одному файлі зберігається більше двох записів, такий тип зберігання називається кластерним індексуванням. Використовуючи кластерне індексування, ми можемо зменшити вартість пошуку через те, що кілька записів, пов’язаних з одним і тим же, зберігаються в одному місці, а також забезпечує часте об’єднання більше ніж двох таблиць (записів).
Індекс кластеризації визначається в упорядкованому файлі даних. Файл даних упорядковано в неключовому полі. У деяких випадках індекс створюється на стовпцях неосновного ключа, які можуть бути не унікальними для кожного запису. У таких випадках, щоб швидше ідентифікувати записи, ми згрупуємо два або більше стовпців разом, щоб отримати унікальні значення та створити з них індекс. Цей метод відомий як індекс кластеризації. По суті, записи зі схожими властивостями групуються разом, і для цих групувань формуються індекси.
Наприклад, студенти, які навчаються кожного семестру, об’єднуються разом. Студенти першого семестру, студенти другого семестру, студенти третього семестру і так далі класифікуються.
Кластерне індексування
- Первинне індексування: Це тип кластерного індексування, у якому дані сортуються відповідно до ключа пошуку, а для створення індексу використовується первинний ключ таблиці бази даних. Це стандартний формат індексування, де він викликає послідовна організація файлів . Оскільки первинні ключі унікальні та зберігаються впорядкованим чином, виконання операції пошуку є досить ефективним.
- Некластеризоване або вторинне індексування : Некластеризований індекс просто повідомляє нам, де знаходяться дані, тобто дає нам список віртуальних покажчиків або посилань на місце, де фактично зберігаються дані. Дані фізично не зберігаються в порядку індексу. Натомість дані присутні в листових вузлах. Наприклад, сторінка вмісту книги. Кожен запис дає нам номер сторінки або розташування збереженої інформації. Фактичні дані тут (інформація на кожній сторінці книги) не впорядковані, але ми маємо впорядковане посилання (сторінка вмісту), де фактично знаходяться точки даних. Ми можемо мати лише щільне впорядкування в некластеризованому індексі, оскільки розріджене впорядкування неможливе, оскільки дані фізично не організовані відповідним чином.
Це вимагає більше часу порівняно з кластерним індексом, оскільки виконується деяка додаткова робота, щоб витягнути дані шляхом подальшого слідування вказівника. У випадку кластерного індексу дані знаходяться безпосередньо перед індексом.

Некластерне індексування
- Багаторівневе індексування: З ростом розміру бази даних зростають і індекси. Оскільки індекс зберігається в основній пам’яті, розмір однорівневого індексу може стати занадто великим для зберігання з кількома доступами до диска. Багаторівневе індексування розділяє основний блок на різні менші блоки, щоб їх можна було зберегти в одному блоці. Зовнішні блоки поділяються на внутрішні блоки, які, у свою чергу, вказують на блоки даних. Це можна легко зберегти в основній пам'яті з меншими накладними витратами.
Багаторівневе індексування
Переваги індексації
- Покращена продуктивність запитів: Індексування дозволяє швидше отримувати дані з бази даних. База даних може швидко виявляти рядки, які відповідають певному значенню або набору значень, генеруючи індекс для стовпця, мінімізуючи кількість часу, необхідного для виконання запиту.
- Ефективний доступ до даних: Індексація може підвищити ефективність доступу до даних, зменшивши обсяг дискового вводу-виводу, необхідного для отримання даних. База даних може підтримувати сторінки даних для часто відвідуваних стовпців у пам’яті, генеруючи індекс для цих стовпців, зменшуючи вимогу до читання з диска.
- Оптимізоване сортування даних: Індексування також може покращити продуктивність операцій сортування. Створюючи індекс для стовпців, які використовуються для сортування, база даних може уникнути сортування всієї таблиці та замість цього сортувати лише відповідні рядки.
- Послідовна продуктивність даних: Індексування може допомогти забезпечити послідовну роботу бази даних, навіть якщо обсяг даних у базі даних зростає. Без індексування запити можуть виконуватися довше, оскільки кількість рядків у таблиці зростає, тоді як індексація підтримує приблизно постійну швидкість.
- Забезпечуючи вставку лише унікальних значень у стовпці, які були проіндексовані як унікальні, індексування також можна використовувати для забезпечення цілісності даних. Це дозволяє уникнути зберігання повторюваних даних у базі даних, що може призвести до проблем під час виконання запитів або звітів.
Загалом, індексація в базах даних забезпечує значні переваги для покращення продуктивності запитів, ефективного доступу до даних, оптимізованого сортування даних, узгодженої продуктивності даних і забезпечення цілісності даних
Недоліки індексації
- Для індексування потрібно більше місця для збереження структури даних індексу, що може збільшити загальний розмір бази даних.
- Збільшення накладних витрат на обслуговування бази даних: Індекси потрібно підтримувати, коли дані додаються, знищуються або змінюються в таблиці, що може збільшити витрати на обслуговування бази даних.
- Індексація може знизити продуктивність вставки та оновлення, оскільки структуру даних індексу необхідно оновлювати щоразу, коли дані змінюються.
- Вибір індексу може бути складним: Вибір правильних індексів для конкретного запиту чи програми може бути складним завданням, і це може вимагати детального вивчення даних і моделей доступу.
Особливості індексації
- Розробка структур даних, таких як B-дерева або Найважливіші стовпці для стовпців індексування вибираються залежно від того, як часто вони використовуються та типів запитів, яким вони піддаються. The потужність , вибірковість та унікальність стовпців індексації можуть бути враховані.
- Бази даних використовують кілька різних типів індексів, включаючи первинні, вторинні, кластерні та некластерні індекси. Виходячи з конкретних потреб системи бази даних, кожна форма індексу пропонує переваги та недоліки.
- Щоб система бази даних функціонувала якнайкраще, потрібне періодичне обслуговування індексів. Відповідно до змін даних і шаблонів використання, робота з обслуговування передбачає створення, оновлення та видалення індексів.
- Оптимізація запитів до бази даних передбачає індексування, яке є важливим. Оптимізатор запитів використовує індекси, щоб вибрати найкращу стратегію виконання для конкретного запиту на основі вартості доступу до даних і вибірковості стовпців індексування.
- Бази даних використовують ряд стратегій індексування, включаючи охоплення індексів, сканування лише індексів і часткові індекси. Ці методи максимізують використання індексів для певних типів запитів і доступу до даних.
- Коли в індексі зберігаються несуміжні блоки даних, це може призвести до фрагментації індексу, що робить індекс менш ефективним. Регулярне обслуговування індексів, наприклад дефрагментація та реорганізація, може зменшитися фрагментація .
Висновок
Індексування – це дуже корисна техніка, яка допомагає оптимізувати час пошуку бази даних запити. Таблиця індексації бази даних складається з ключа пошуку та покажчик . Існує чотири типи індексування: первинне, вторинне кластеризування та багатозначне індексування. Первинне індексування поділяється на два типи: щільне і розріджене. Щільне індексування використовується, коли таблиця індексів містить записи для кожного ключа пошуку. Розріджене індексування використовується, коли таблиця індексів не використовує ключ пошуку для кожного запису. Використання багаторівневої індексації B+ Дерево . Основною метою індексування є забезпечення кращої продуктивності для пошуку даних.
Поширені запитання щодо індексування
Q.1: Що таке індексування в базах даних?
відповідь:
Індексування — це в основному техніка, яка допомагає скоротити час пошуку запиту до бази даних або допомагає швидше отримати доступ до бази даних.
Q.2: Які є приклади індексування баз даних?
відповідь:
Деякими поширеними прикладами баз даних індексування є Web of Science, DOAJ (каталог журналів відкритого доступу).
Для отримання більш детальної інформації ви можете звернутися до Знайомство з B+ Tree і Типи ключів у базі даних стаття.