devterview_$ iniciar simulação

Índice clustered do InnoDB e a escolha da primary key

DifícilSêniorArmazenamento e índices

Pergunta

O que significa o InnoDB usar um índice clustered pela primary key, e por que uma PK do tipo UUID aleatório pode ser ruim?

Resposta esperada

No InnoDB, a tabela É a B-tree da primary key: as linhas ficam fisicamente ordenadas e armazenadas nas folhas do índice da PK (índice clustered). Índices secundários guardam o valor da PK como ponteiro pra linha. Consequências: buscar pela PK é muito rápido (a linha está na folha); a PK deve ser pequena, porque ela é copiada em todo índice secundário. UUID v4 aleatório como PK é ruim porque inserções caem em posições aleatórias da B-tree — causa fragmentação, splits de página frequentes e péssima localidade de cache, degradando escrita conforme a tabela cresce. Alternativas: BIGINT auto-incremento (inserção sempre no fim), ou UUID v7/ULID que são ordenáveis por tempo.

Por que perguntam isso

Pergunta pleno/sênior de MySQL. Sinais de domínio: 'a tabela é a árvore da PK', 'a PK é copiada nos secundários', e a solução UUID v7/ULID.

#innodb#clustered-index#primary-key#uuid
publicidade

Perguntas de acompanhamento

Relacionadas