Выбор ответа Middle ClickHouse и колоночные СУБД спрашивают часто обновлено
Разреженный индекс
Вопрос
Что хранит первичный индекс таблицы MergeTree?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Значения ключа для каждой гранулы (по умолчанию 8192 строки), по ним выбираются гранулы. Индекс разреженный: одна запись на гранулу, поэтому он маленький и держится в памяти.
Варианты ответа
- Указатель на каждую строку в виде B-дерева, как первичный ключ в PostgreSQL
- Хеш каждой строки по ключу, по которому при вставке проверяется уникальность
- Значения ключа для каждой гранулы (по умолчанию 8192 строки), по ним выбираются гранулыправильный ответ
- Минимум и максимум каждой колонки таблицы для каждой части, по ним отсекаются ненужные части
Разбор
Индекс разреженный: одна запись на гранулу, поэтому он маленький и держится в памяти. По нему ClickHouse определяет, какие гранулы могут содержать нужный диапазон ключа, и читает их целиком. Указателей на каждую строку нет, это делает индекс компактным, но точечный поиск всё равно читает минимум гранулу. Уникальность не проверяется. Минимумы и максимумы произвольных колонок дают skip-индексы типа minmax.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.