UUIDv7 se Destaca em Performance Contra UUIDv4 e Bigint no PostgreSQL
Aprofundamento CEVIU
Aprofundamento
A escolha da chave primária impacta profundamente a performance de um banco de dados, e o benchmark no PostgreSQL 18 demonstrou isso com clareza. Enquanto o bigint continua sendo a opção mais rápida e compacta para chaves sequenciais, o UUIDv7 emerge como uma alternativa robusta e performática para cenários que exigem identificadores universais. A principal diferença reside na forma como os índices B-tree são gerenciados. O UUIDv4, com sua aleatoriedade, força o PostgreSQL a espalhar as novas entradas por todo o índice, resultando em fragmentação. Isso leva a um baixo fator de preenchimento (fillfactor) das páginas do índice, aumento do tamanho do índice em disco e, crucialmente, mais operações de I/O, pois o banco precisa ler mais páginas para encontrar os dados.
Já o UUIDv7, sendo temporalmente ordenado, direciona as novas entradas para a extremidade direita do índice, minimizando a fragmentação e otimizando a escrita. Essa localidade de dados não só acelera as inserções, mas também reduz drasticamente o volume do Write-Ahead Log (WAL), já que menos páginas de índice precisam ser registradas integralmente após um checkpoint (o fenômeno das full_page_writes). Para leitura de dados recentes, o UUIDv7 também se sobressai, pois os registros mais novos tendem a estar próximos uns dos outros no disco e na memória cache (buffer pool), otimizando a eficiência do cache e diminuindo a latência de acesso.
O que mudou
A grande novidade é a inclusão nativa da função uuidv7() no PostgreSQL 18, marcando uma evolução importante para desenvolvedores que precisam de UUIDs com alta performance. Antes, a geração de UUIDs ordenados temporalmente frequentemente dependia de implementações no lado da aplicação ou de extensões externas. Agora, o banco de dados oferece uma solução otimizada diretamente no core. Além disso, o PostgreSQL 18 padronizou uuidv4() como um alias explícito para o que gen_random_uuid() já produzia, clarificando as opções disponíveis para identificadores aleatórios e ordenados.
Por que isso importa
Para desenvolvedores, a performance do UUIDv7 significa menor latência em operações de escrita intensivas e maior eficiência no uso de recursos do banco de dados, como disco e memória. A redução no volume do WAL é um benefício significativo para a infraestrutura, impactando positivamente a replicação, backups e recuperação de desastres. Sistemas distribuídos, onde identificadores globais são essenciais e a fusão de dados é comum, se beneficiam enormemente da ordenação temporal do UUIDv7, que também facilita a depuração e auditoria ao correlacionar identificadores com o tempo de criação.
A capacidade de migrar facilmente tabelas existentes de UUIDv4 para o novo padrão, simplesmente alterando o DEFAULT da coluna, representa um caminho de otimização de baixo custo e alto impacto. Mesmo sem reconstruir o índice, novas inserções já se beneficiarão da melhoria. Em suma, o UUIDv7 oferece um balanço atraente entre a universalidade dos UUIDs e a performance que se aproxima das chaves sequenciais, tornando-o a escolha padrão para a maioria dos novos projetos e uma otimização valiosa para os existentes.
Linha do tempo
CEVIU News publica sobre Postgres 19 e migração para compressão LZ4
CEVIU News reporta estudo comparando DuckDB e Apache Spark para processamento de JSON no S3
CEVIU News cobre otimização de expressões regulares no PostgreSQL com pg_tre e pg_re2
CEVIU News divulga otimização de consultas Postgres pela Lorikeet com typecast
CEVIU News aborda a eficiência do batching para performance de dados no PostgreSQL
CEVIU News detalha nova extensão TIN para busca full-text de alta performance no PostgreSQL
UUIDv7 se destaca em performance contra UUIDv4 e Bigint no PostgreSQL
Perguntas frequentes
Por que UUIDv7 é mais rápido que UUIDv4 no PostgreSQL?
UUIDv7 é temporalmente ordenado, o que otimiza a escrita no índice B-tree, reduzindo a fragmentação e garantindo que novas entradas sejam adicionadas na extremidade. Isso resulta em menos I/O, menor volume de WAL e melhor aproveitamento do cache, ao contrário do UUIDv4 que, por ser aleatório, espalha as escritas e fragmenta o índice.
Posso migrar uma tabela existente de UUIDv4 para UUIDv7 sem reescrever dados?
Sim, é possível alterar o comportamento de novas inserções. Basta usar ALTER TABLE sua_tabela ALTER COLUMN id SET DEFAULT uuidv7();. As novas chaves serão geradas com UUIDv7, compartilhando o mesmo tipo de coluna e índice com as chaves UUIDv4 existentes, trazendo benefícios de performance imediatamente para as novas inserções.
Quais as principais desvantagens de usar UUIDv7?
A principal desvantagem é que o timestamp embutido no UUIDv7 é legível, o que pode não ser desejável em cenários onde o tempo de criação de um identificador deve ser mantido em segredo. Além disso, UUIDs (incluindo v7) ocupam 16 bytes, o dobro dos 8 bytes de um bigint, impactando o tamanho do índice e das chaves estrangeiras.
UUIDv7 substitui completamente o bigint como chave primária?
Não completamente. O bigint ainda é a opção mais compacta e ligeiramente mais rápida. No entanto, o UUIDv7 é uma excelente alternativa para casos onde identificadores universais são necessários, como em sistemas distribuídos ou quando IDs são gerados por clientes, oferecendo uma performance significativamente superior ao UUIDv4 e muito próxima do bigint.
Fontes
- importstatic.comfonte original
- Categoria
- CEVIU Web Dev
- Publicado
- 12 de outubro de 2026
- Editoria
- CEVIU Web Dev

