Para armazenar um UUID de 128 bits, existem várias opções de armazenamento:
- uma coluna de byte [16]
- duas colunas bigint / long (64 bits)
- uma coluna CHAR (36) - 32 dígitos hexadecimais + 4 traços.
- uma coluna específica do banco de dados UUID, se o db suportar
Do ponto de vista da indexação, quais são as mais eficientes? Se o db não suportar um tipo de uuid dedicado, quais de 1, 2, 3 são os melhores candidatos?
sql-server
mysql
oracle
postgresql
index
Vlad Mihalcea
fonte
fonte
raw(16)
no Oracle euuid
no PostgreSQL.uuid
>>bytea
>>text
comCHECK
restrição>varchar(36)
>>char(36)
. Consulte: dba.stackexchange.com/a/89433/3684 e dba.stackexchange.com/a/115316/3684 .Respostas:
Um
uuid
tipo dedicado é sua melhor aposta para o PostgreSQL. Difícil dizer com outros bancos de dados - não é impossível alguém implementar umuuid
tipo que é armazenado com menos eficiência do que um tipo de byte simples.Novamente no PostgreSQL,
bytea
seria uma maneira razoável de armazenar UUIDs se você não tivesse ouuid
tipo. Para outros bancos de dados, depende de como eles armazenam dados binários.Sempre que possível, eu evitaria usar hex-com-traços. É muito menos eficiente comparar, classificar e armazenar.
Então, realmente, "não (2) ou (3)". Sempre. Use (4) onde suportado, (1) caso contrário.
fonte
SELECT ARRAY['ef1e0638-072e-4caa-88b3-97bfa5b2e8c3']::uuid[]
Em ordem de preferência: 4,1,2,3 Não use UUIDs como a chave de cluster, se estiver usando o SQL server, pois ele não somente se fragmentará; a chave de cluster é usada em todos os índices não em cluster e você adicionaria esses bytes a cada linha do índice. A fragmentação pode ser atenuada usando NEWSEQUENTIALID, mas geralmente prefere uma identidade bingint para sua Chave de Clustering sobre um GUID para evitar inchaço em outros índices.
A diferença entre escolher 1 sobre 2 dependerá de quão mais eficiente o banco de dados lida com duas colunas de tipos básicos em uma matriz fixa de coluna única. Deve ser fácil o suficiente para testar com dados fictícios. Veja a velocidade das suas consultas, bem como o tamanho dos índices e dados. Pequeno + rápido é o melhor!
fonte
Alguém teria que supor que qualquer tipo de dado suportado nativamente seria melhor otimizado no produto do que qualquer coisa que pudesse ser montada como cliente desse produto. Depois disso, o que tiver a menor contagem de bytes, para que você obtenha o máximo de linhas por página.
fonte