B-tree индекс
Тип индекса по умолчанию в PostgreSQL. Подходит для операций =, <, >, BETWEEN, LIKE 'prefix%'.
CREATE INDEX ON table USING btree (column); -- btree по умолчанию
Объяснение
Пример
-- B-tree хорош для: CREATE INDEX ON orders (created_at); -- диапазон дат CREATE INDEX ON users (email); -- точное совпадение -- GIN для массивов: CREATE INDEX ON articles USING gin (tags);
Связанные термины
Анекдоты по теме
— Почему UUID медленнее INT как первичный ключ? — UUID случайный — вставки разбросаны по всему индексу. — INT последовательный — всегда в конец. — Насколько медленнее? — На больших таблицах B-tree страницы постоянно разбиваются. В разы медленнее INSERT. — Решение? — UUID v7 (упорядоченный по времени) или ULID — случайные, но монотонные.
Django ORM и дата: User.objects.filter(created_at__year=2024) SQL: WHERE EXTRACT(year FROM created_at) = 2024 — Но это функция на колонке! — Индекс не использует? — Нет. Для больших таблиц лучше: .filter(created_at__gte=date(2024,1,1), created_at__lt=date(2025,1,1))
Индекс — это как оглавление книги. Кластерный индекс — это как сама книга, уже отсортированная. Mожет быть только один. Потому что нельзя одну книгу одновременно отсортировать по двум разным правилам.