Выбор ответа Middle ClickHouse и колоночные СУБД спрашивают часто обновлено

Разреженный индекс

Вопрос

Что хранит первичный индекс таблицы MergeTree?

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

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

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

Коротко

Правильный ответ: Значения ключа для каждой гранулы (по умолчанию 8192 строки), по ним выбираются гранулы. Индекс разреженный: одна запись на гранулу, поэтому он маленький и держится в памяти.

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

  1. Указатель на каждую строку в виде B-дерева, как первичный ключ в PostgreSQL
  2. Хеш каждой строки по ключу, по которому при вставке проверяется уникальность
  3. Значения ключа для каждой гранулы (по умолчанию 8192 строки), по ним выбираются гранулыправильный ответ
  4. Минимум и максимум каждой колонки таблицы для каждой части, по ним отсекаются ненужные части

Разбор

Индекс разреженный: одна запись на гранулу, поэтому он маленький и держится в памяти. По нему ClickHouse определяет, какие гранулы могут содержать нужный диапазон ключа, и читает их целиком. Указателей на каждую строку нет, это делает индекс компактным, но точечный поиск всё равно читает минимум гранулу. Уникальность не проверяется. Минимумы и максимумы произвольных колонок дают skip-индексы типа minmax.

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

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