Конспекти лекцій та Лабораторні роботи з дисципліни "Алгоритми та структури даних" для III курсу спеціальності 121 "Інженерія програмного забезпечення" ОКР "Фаховий молодший бакалавр" Херсонського політехнічного фахового коледжу Державного університету "Одеська політехніка"
Індекс — це спеціальна структура даних, призначена для прискорення пошуку записів у таблицях бази даних.
Його можна порівняти з алфавітним покажчиком у книзі або каталогом у бібліотеці: замість послідовного перегляду всіх сторінок індекс дозволяє швидко знайти потрібну інформацію за ключем.
Індекс не змінює зміст таблиці й не впливає на результат запиту, але істотно оптимізує швидкість виконання операцій пошуку, сортування та фільтрації.
Основною метою використання індексів є зменшення кількості записів, які потрібно зчитувати для виконання запиту.
Унікальний індекс (UNIQUE) — забезпечує, щоб значення індексованого поля не повторювалися (наприклад, поле id
).
Якщо спробувати вставити дубльоване значення, СУБД поверне помилку.
Неунікальний індекс (NON-UNIQUE) — допускає повторення значень (наприклад, поле «місто» у таблиці «клієнти»).
(name, surname)
не є еквівалентним індексу (surname, name)
.Індекси відрізняються за внутрішньою структурою зберігання даних, що впливає на швидкість виконання операцій пошуку та обсяг необхідної пам’яті.
Найбільш поширеними є такі структури:
B-Tree (збалансоване дерево пошуку) — основна структура індексів у більшості реляційних СУБД (MySQL, PostgreSQL, SQLite).
Дані зберігаються у впорядкованому вигляді, а пошук, вставка та видалення виконуються зі складністю O(log n)
.
Переваги:
BETWEEN
, >
, <
).ORDER BY
) та фільтрації (WHERE
).Недоліки:
B+Tree — це модифікований варіант B-дерева, у якому всі ключі зберігаються лише в листових вузлах, а внутрішні вузли містять лише навігаційні значення.
Особливості:
Використання:
Hash-індекс використовує хеш-функцію для обчислення позиції запису в таблиці.
Завдяки цьому пошук за точним збігом (=
) виконується майже миттєво — за амортизовану складність O(1)
.
Переваги:
Недоліки:
Використання:
GiST — узагальнена структура для побудови спеціалізованих індексів.
Вона дозволяє створювати індекси для різних типів даних: числових, геометричних, текстових тощо.
Особливості:
Використання:
GIN (зворотний індекс) використовується для структур, які містять множини значень (масиви, JSON, документи, текст).
Особливості:
ARRAY
, JSONB
, tsvector
.Приклад:
CREATE INDEX idx_docs_text_gin
ON documents USING gin(to_tsvector('english', content));
R-Tree — це просторовий індекс, призначений для дво- та тривимірних об’єктів, наприклад координат, полігонів або областей.
Принцип роботи:
Кожен вузол зберігає мінімальний обмежувальний прямокутник (MBR).
Пошук здійснюється через перевірку перетинів між запитом і MBR вузлів.
Використання:
Геоінформаційні системи (PostGIS, Spatialite).
Просторові запити типу «знайти об’єкти в межах області».
Тип індексу | Структура | Складність пошуку | Підтримка діапазонів | Основне застосування |
---|---|---|---|---|
B-Tree | Балансоване дерево | O(log n) | Так | Загальні запити |
B+Tree | Листове дерево | O(log n) | Так | СУБД, файлові системи |
Hash | Хеш-таблиця | O(1) | Ні | Пошук за точним збігом |
GiST | Узагальнене дерево | Залежить | Так | Гео та складні типи |
GIN | Зворотний індекс | O(log n) | Частково | Повнотекстовий пошук |
R-Tree | Просторове дерево | O(log n) | Так | Географічні дані |