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 по всем тегам.
Оптимизатор запросов говорит медленному подзапросу: — Ты почему такой тормоз? Подзапрос (ковыряя IN (SELECT ...)): — Я каждую строчку с каждой сравниваю. Зато честно. Оптимизатор: — Используй EXISTS. Подзапрос, помолчав: — Так я не знаю, существую ли я на самом деле после этого...
— Почему оптимизатор иногда выбирает плохой план? — Устаревшая статистика. Запусти ANALYZE. — Или: очень нетипичное распределение данных. — Или: коррелированные условия WHERE — оптимизатор считает их независимыми. — Решение? — CREATE STATISTICS ON (a, b) FROM table; — многоколоночная статистика.