Ответ
Самый распространенный и базовый тип индекса в реляционных СУБД (MySQL, PostgreSQL, Oracle и др.) — это B-дерево (B-Tree) индекс.
Почему B-дерево?
- Универсальность: Эффективно поддерживает операции, которые составляют большинство рабочих нагрузок:
- Точечные запросы (
WHERE id = 5) - Запросы по диапазону (
WHERE date BETWEEN '2023-01-01' AND '2023-12-31') - Сортировка (
ORDER BY) - Поиск по префиксу.
- Точечные запросы (
- Сбалансированность: B-дерево остается сбалансированным, что гарантирует время доступа
O(log n)для поиска, вставки и удаления. - Стандарт по умолчанию: В большинстве СУБД при простом указании
CREATE INDEXсоздается именно B-дерево индекс.
Пример создания и использования (SQL):
-- Создание самого распространенного B-Tree индекса
CREATE INDEX idx_user_email ON users(email);
-- Запрос, который может эффективно использовать этот индекс
SELECT * FROM users WHERE email = 'user@example.com';
-- А также запросы с сортировкой или диапазоном по этому полю
SELECT * FROM users WHERE email LIKE 'a%' ORDER BY email;
Другие типы индексов (используются в специфичных сценариях):
- Hash-индекс: Только для операций равенства (
=), быстрее B-дерева для точечных запросов, но не поддерживает диапазоны и сортировку. - Bitmap-индекс: Для столбцов с малым количеством уникальных значений (например,
пол,статус). - Full-text индекс: Для полнотекстового поиска.
- GiST, SP-GiST, GIN, BRIN: Специализированные индексы в PostgreSQL для сложных данных (геоданные, массивы, JSON).
B-дерево остается "рабочей лошадкой" из-за своего оптимального баланса производительности и функциональности.