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 — случайные, но монотонные.
— Что такое seq_page_cost и random_page_cost? — Параметры PostgreSQL для оценки стоимости I/O. — По умолчанию random_page_cost = 4.0 (в 4 раза дороже seq). — На SSD? — Лучше поставить 1.1–1.5. Оптимизатор будет чаще использовать индексы. — Это действительно меняет планы? — Значительно.
Оптимизатор запросов говорит медленному подзапросу: — Ты почему такой тормоз? Подзапрос (ковыряя IN (SELECT ...)): — Я каждую строчку с каждой сравниваю. Зато честно. Оптимизатор: — Используй EXISTS. Подзапрос, помолчав: — Так я не знаю, существую ли я на самом деле после этого...