ИндексыСредний
B-tree индекс
Тип индекса по умолчанию в PostgreSQL. Подходит для операций =, <, >, BETWEEN, LIKE 'prefix%'.
Синтаксис
CREATE INDEX ON table USING btree (column); -- btree по умолчаниюОбъяснение
B-tree (Balanced Tree) — сбалансированное дерево поиска. Поиск за O(log n).
Поддерживает: =, <, <=, >, >=, BETWEEN, IN, LIKE 'prefix%', IS NULL (частично).
Не подходит: LIKE '%suffix', поиск по массивам, full-text search.
Для этих случаев используй: GIN (массивы, JSONB, FTS), GiST (геометрия, диапазоны), pg_trgm+GIN (LIKE '%text%').
Пример
-- B-tree хорош для:
CREATE INDEX ON orders (created_at); -- диапазон дат
CREATE INDEX ON users (email); -- точное совпадение
-- GIN для массивов:
CREATE INDEX ON articles USING gin (tags);Связанные термины
Анекдоты по теме
Разработчик смотрит на EXPLAIN и видит: cost=0.00..99999.00 rows=1000000 — Это нормально? DBA: (смотрит на часы, потом на разработчика) — Нет.
— Что общего у поиска иголки в стоге сена и SELECT без индекса? — И то и другое занимает вечность. Только в базе стог сена — это миллион строк.
— Сколько джойнов нужно для счастья? — Один INNER JOIN и хороший индекс на колонку связи.