Когда BRIN-индекс хорош
Вопрос
В таблице metrics 2 млрд строк, строки только добавляются, запросы всегда за диапазон времени. Почему здесь подходит BRIN по ts?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- BRIN хранит каждую строку в сжатом виде и ищет точнее и быстрее B-tree
- BRIN поддерживает уникальность и подходит для первичного ключа таблицы
- BRIN работает при любом порядке строк, потому что сам их сортирует
- Время растёт с физическим порядком, BRIN хранит min/max блоков и малправильный ответ
Разбор
BRIN (Block Range Index) хранит сводку по диапазону страниц, по умолчанию 128: для времени это минимум и максимум. Поэтому он весит мегабайты вместо десятков гигабайт, а запрос по диапазону читает только те блоки, чьи сводки пересекаются с условием. Работает, когда значения коррелируют с физическим расположением, как у журнала, куда пишут только в конец. Если строки перемешаны, у каждого диапазона минимум и максимум покроют почти всё, и индекс бесполезен. Найденные блоки читаются целиком и перепроверяются, так что точечный поиск у B-tree быстрее. Уникальность BRIN не поддерживает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Index Only Scan с большим Heap Fetches
Следующий вопрос
Запретить пересекающиеся бронирования в базе