B-tree хранит упорядоченные ключи, BRIN — сводки по диапазонам блоков. BRIN особенно компактен на больших таблицах, где значения коррелируют с физическим порядком строк.
В чём разница между индексами BRIN (Block Range Index) и B-Tree в PostgreSQL? Для каких типов таблиц, например логов и временных рядов, индекс BRIN даст значительную экономию дискового пространства и превзойдёт B-Tree по скорости создания?
B-tree хранит упорядоченные ключи, BRIN — сводки по диапазонам блоков. BRIN особенно компактен на больших таблицах, где значения коррелируют с физическим порядком строк.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
B-tree хранит упорядоченные ключи, BRIN — сводки по диапазонам блоков. BRIN особенно компактен на больших таблицах, где значения коррелируют с физическим порядком строк.
Типичный пример — преимущественно дописываемый журнал с возрастающим временем. По границам диапазонов BRIN отбрасывает ненужные блоки, а оставшиеся строки перепроверяются: индекс является lossy.
За счёт меньшего числа записей он часто занимает значительно меньше места и быстрее строится, чем B-tree. Но не гарантирует лучший поиск: случайно перемешанные значения ухудшают отсечение, а точечные запросы нередко выгоднее обслуживает B-tree. Настройка размера диапазона балансирует размер индекса и точность. Проверяйте фактическую корреляцию и планы запросов.
Источник: www.postgresql.org.