Eu tenho um esquema legado (isenção de responsabilidade!) Que usa um ID gerado com base em hash para a chave primária de todas as tabelas (existem muitas). Um exemplo dessa identificação é:
922475bb-ad93-43ee-9487-d2671b886479
Não há esperança possível de mudar essa abordagem, no entanto, o desempenho com acesso ao índice é ruim. Deixando de lado a miríade de razões isso pode ser, há uma coisa que eu notei que parecia abaixo do ideal - apesar de todos os valores de ID em todas as muitas mesas sendo exatamente 36 caracteres de comprimento, o tipo de coluna é varchar(36)
, não char(36)
.
Alterar os tipos de coluna para comprimento fixo char(36)
ofereceria benefícios significativos no desempenho do índice, além do pequeno aumento no número de entradas por página de índice, etc.?
Ou seja, o postgres tem um desempenho muito mais rápido ao lidar com tipos de comprimento fixo do que com tipos de comprimento variável?
Não mencione a minúscula economia de armazenamento - isso não será importante em comparação com a cirurgia necessária para fazer a alteração nas colunas.
fonte
char(n)
quase nunca vence em nenhum aspecto. Não use. Os tipos de dadostext
evarchar
(sem modificador de comprimento) são compatíveis com binários e compartilham as mesmas características de desempenho. Existem razões históricas para que ambos coexistam no Postgres. Internamente,text
é o tipo "preferido" entre os tipos de sequência (que podem influenciar a resolução do tipo de função). Os ciclos de CPU para imporvarchar(n)
pouca matéria. Use uma restrição de comprimento quando precisar . No caso em questãouuid
é o verdadeiro vencedor.