Выбор ответа Senior Проектирование и нормализация обновлено

Случайные UUID и индекс

Вопрос

Первичный ключ таблицы событий сделали uuid со значениями UUID v4. Вставок миллионы в сутки. Какая проблема вероятнее всего проявится?

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

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

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

Коротко

Правильный ответ: Вставки в случайные места B-tree, индекс раздувается. Значения v4 случайны, поэтому каждая вставка идёт в произвольный лист индекса: рабочий набор страниц не помещается в кеш, страницы делятся, индекс фрагментирован.

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

  1. UUID v4 часто совпадают, будут ошибки уникальности
  2. По uuid нельзя построить B-tree индекс, только hash
  3. Вставки в случайные места B-tree, индекс раздуваетсяправильный ответ
  4. UUID занимает 36 байт, как строка, индекс огромный

Разбор

Значения v4 случайны, поэтому каждая вставка идёт в произвольный лист индекса: рабочий набор страниц не помещается в кеш, страницы делятся, индекс фрагментирован. Последовательный bigint или упорядоченный по времени UUID v7 вставляются в «правый край» дерева. Коллизии v4 на практике исключены (122 случайных бита). B-tree по uuid строится обычным образом. Тип uuid занимает 16 байт, 36 это длина текстового представления.

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

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