Aguarde, carregando...

Usar UUID como chave primária tem vantagens e desvantagens

Usar UUID como chave primária tem vantagens e desvantagens
Daniel Crocciari
Por: Daniel Crocciari
Dia 02/01/2025 02h45

A escolha entre UUID e ID (inteiro auto-incremental) depende muito do caso de uso e das prioridades do projeto, ambas as abordagens possuem vantagens e desvantagens, de um modo geral é necessário analisar o uso.

Atualmente muito se fala que o ideal é usar UUID ao invés de um ID auto incremento, mas no fundo a decisão é bem mais profunda. Vamos iniciar este artigo com algumas comparações gerais:

1. Espaço em armazenamento

UUID (16 bytes): Ocupa mais espaço em comparação a um inteiro (INT ou BIGINT).

INT (4 bytes), enquanto um BIGINT (8 bytes).

Isso significa que cada tabela que referenciar o UUID como chave estrangeira vai replicar o tamanho do UUID, aumentando o consumo de armazenamento e podendo diminuir a performance para grandes bases de dados.

2. Índices

Índices em colunas com UUIDs são maiores, o que pode aumentar o tempo de busca e reduzir a eficiência de leitura, principalmente em bancos de dados que precisam fazer muitas operações de escrita/leitura.

3. Legibilidade

Um UUID é menos legível para humanos do que um ID incremental. Para debug e logs, trabalhar com números inteiros (ID) é mais fácil.

Quando usar UUID

Ambiente distribuído:

Em sistemas onde múltiplos servidores ou serviços estão criando registros simultaneamente, UUID evita colisões porque é globalmente único.

Por exemplo, se você tem um sistema distribuído com várias tabelas ou serviços independentes gerando chaves primárias, UUID é uma escolha robusta.

Privacidade e segurança:

Se você não quer que IDs sejam previsíveis (por exemplo, URLs públicas que expõem IDs incrementais), UUID é mais seguro, pois os valores são aleatórios.

Sincronização entre sistemas:

Se os dados precisam ser sincronizados entre sistemas distintos (ex.: replicação de bases de dados ou integrações entre serviços), UUID facilita identificar registros únicos.

Quando usar ID incremental (INT ou BIGINT)

Desempenho:

Em bases de dados menores ou sistemas que priorizam performance de escrita/leitura, IDs incrementais são mais eficientes. Os índices ocupam menos espaço e são mais rápidos para processar.

Simples e local:

Se o banco de dados é usado por um único sistema e não há risco de colisões entre IDs, um ID incremental é mais que suficiente.

Armazenamento:

Para sistemas com tabelas muito grandes e várias relações com chaves estrangeiras, IDs incrementais economizam espaço e tornam a consulta mais rápida.

Alternativa híbrida

Em alguns casos, você pode usar uma abordagem mista:

Usar IDs incrementais como chave primária interna para tabelas principais (relacionais).

Adicionar uma coluna UUID para expor publicamente os registros ou para sincronização entre sistemas, mas mantê-la como secundária.

Sendo assim, se o desempenho e o tamanho do banco são mais importantes, opte por IDs incrementais (INT ou BIGINT).

Se o sistema é distribuído ou exige segurança/privacidade, UUID pode ser mais apropriado.

Para muitos casos de uso comuns (sistemas centralizados ou monolíticos), um ID incremental funciona muito bem.

Se optar por UUID, considere também otimizações, como a versão compactada BINARY(16) em vez do formato tradicional de string VARCHAR(36).

Sua avaliação criteriosa deverá garantir o futuro do seu código e do seu projeto, gaste algum tempo simulando o que poderá acontecer com sua base de dados no futuro, isso é muito importante e agora é a hora.

Veja também:

Confira mais artigos e vídeos do Farol .