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);
Связанные термины
Анекдоты по теме
— Что такое GIN индекс? — Generalized Inverted Index. Для составных типов: массивы, JSONB, full-text search. — Пример? — CREATE INDEX ON articles USING GIN (tags); SELECT * FROM articles WHERE tags @> ARRAY['sql']; — @> — это «содержит»? — Да. Без GIN — seq scan по всем тегам.
— Что такое CLUSTER в PostgreSQL? — Физическая перезапись таблицы по порядку индекса. CLUSTER orders USING orders_created_at_idx; — После этого строки физически упорядочены по created_at. — Зачем? — Range queries по дате работают быстрее — меньше random I/O. — Минус? — Не поддерживается автоматически. Новые строки вставляются в случайном порядке.
— Что такое pg_trgm? — Расширение для поиска по подстроке с индексом. — Как? — CREATE EXTENSION pg_trgm; CREATE INDEX ON articles USING GIN (title gin_trgm_ops); SELECT * FROM articles WHERE title ILIKE '%postgres%'; — Теперь LIKE '%...%' использует индекс! — Это меняет всё для поиска.