Выбор ответа Senior Индексы обновлено

Когда BRIN-индекс хорош

Вопрос

В таблице metrics 2 млрд строк, строки только добавляются, запросы всегда за диапазон времени. Почему здесь подходит BRIN по ts?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Время растёт с физическим порядком, BRIN хранит min/max блоков и мал. BRIN (Block Range Index) хранит сводку по диапазону страниц, по умолчанию 128: для времени это минимум и максимум.

Варианты ответа

  1. BRIN хранит каждую строку в сжатом виде и ищет точнее и быстрее B-tree
  2. BRIN поддерживает уникальность и подходит для первичного ключа таблицы
  3. BRIN работает при любом порядке строк, потому что сам их сортирует
  4. Время растёт с физическим порядком, BRIN хранит min/max блоков и малправильный ответ

Разбор

BRIN (Block Range Index) хранит сводку по диапазону страниц, по умолчанию 128: для времени это минимум и максимум. Поэтому он весит мегабайты вместо десятков гигабайт, а запрос по диапазону читает только те блоки, чьи сводки пересекаются с условием. Работает, когда значения коррелируют с физическим расположением, как у журнала, куда пишут только в конец. Если строки перемешаны, у каждого диапазона минимум и максимум покроют почти всё, и индекс бесполезен. Найденные блоки читаются целиком и перепроверяются, так что точечный поиск у B-tree быстрее. Уникальность BRIN не поддерживает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.