Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 3914|Resposta: 3

[Fonte] [MSSQL] GUIDs ordenados e GUIDs não ordenados do SQL SERVER como testes primários de agregação de chaves

[Copiar link]
Publicado em 08/06/2023 21:12:26 | | | |
Requisitos: Ao usar GUIDs como índices primários de agregação de chaves, recomenda-se usar GUIDs ordenados, pois GUIDs não ordenados causarão desperdício de espaço e a consequente diminuição na eficiência de leitura e escrita.

Revisar:

Fragmentação de índice otimizada para desempenho do SQL Server
https://www.itsvse.com/thread-9508-1-1.html

[Girar] (MSSQL) Int e GUID do banco de dados SQL Server para comparação de chaves primárias
https://www.itsvse.com/thread-10605-1-1.html

Valor GUID do banco de dados

Os tipos de dados com Identificador Globalmente Único (GUID) no SQL Server são representados por tipos de dadosIdentificador único, que armazena um valor binário de 16 bytes. Um GUID é um número binário cujo principal propósito é servir como um identificador que deve ser único em uma rede com muitos computadores em vários locais.

Tanto o Guid quanto o SqlGuid têm formas de comparar diferentes valores de GUID. A implementação do SqlGuid utiliza o comportamento do SQL Server,Os últimos seis bytes do valor são os mais importantes

GUIDs sequenciais são inerentemente adivinháveis, então não os use em contextos sensíveis à segurança

Referência:O login do hiperlink está visível.

O banco de dados é ordenado pelo GUID

O banco de dados SQL Server possui umNewSequentialId()função para criar um GUID ordenado. Ao criar uma tabela, você pode defini-la como o valor padrão de um campo do tipo GUID e criar automaticamente o valor da chave primária ao inserir novos dados (essa função só pode ser usada como valor padrão do campo, não chamada diretamente em SQL).

Exemplo:

A função NewSequentialId() só pode ser usada em bancos de dados, embora a documentação MSDN da Microsoft afirme que NEWSEQUENTIALID é um wrapper para a função Windows UuidCreateSequential.

Dica: Não use a função se for uma questão de confidencialidade. PorqueÉ possível adivinhar o valor do próximo GUID geradopara acessar os dados associados a esse GUID.

Referência:O login do hiperlink está visível.
O login do hiperlink está visível.

.NET cria um GUID ordenado

A função UuidCreateSequential depende do hardware de computação do métodoOs últimos 12 bits são, na verdade, o endereço MAC da placa de rede

O código é o seguinte:

Os resultados são os seguintes:



Deficiência:

  • Esse método requer o DllImport para chamar a biblioteca do Windows, então não é multiplataforma.
  • Não pode ser usado em um ambiente clusterizado, onde múltiplas máquinas escrevem no mesmo banco de dados porque os GUIDs resultantes serão diferentes entre si (hardware de computação dependente de funções), resultando em fragmentação de índice.
  • Se seu servidor Windows reiniciar, o GUID pode iniciar em uma faixa inferior, resultando em fragmentação do índice.

Referência:

O login do hiperlink está visível.
O login do hiperlink está visível.

Se você está usando um programa .NET para criar um GUID ordenado por SQL SERVER, recomenda-se usar uma biblioteca de classes de terceiros:RT. Pente, o comando nuget é o seguinte:


O código é o seguinte:

Saída:



Referência:O login do hiperlink está visível.

Fragmentos ordenados e não ordenados do índice primário de chave do GUID

Comece criando duas tabelas com o seguinte script:

O teste insere 100.000 dados, e o código é o seguinte:

Os resultados dos testes são os seguintes:

GUIDTempo Consumido (MS)Densidade de Varredura [Melhor Contagem: Contagem Real], quanto maior o valor, melhorFragmentação por Varredura Lógica: quanto menor o valor, melhorDensidade média de páginas (completa) (Média. Densidade de página (cheia), quanto maior o valor, melhor
GUID não ordenado 1336712.58% [61:485]98.97%63.66%
Ordem GUID 14139100.00% [39:39]0.32%99.61%





O teste insere novamente 1 milhão de pedaços de dados, com um GUID fora de ordem levando 135203 ms e um GUID ordenado levando 135134 ms. A ocupação do espaço de armazenamento é a seguinte:

GUID não ordenado: 36,547 MB
GUID encomendado: 26,609 MB



Referência:O login do hiperlink está visível.


(Fim)




Anterior:.NET Core programa .NET Core arquivos multilíngues de leitura e gravação de recursos (.resx)
Próximo:Otimização da memória do arquivo de disco por leitura de fluxo .NET/C#
 Senhorio| Publicado em 27/01/2024 11:07:12 |
O ABP cria um GUID ordenado para o banco de dados SQL Server, cujo código-fonte é o seguinte:



 Senhorio| Publicado em 24/03/2024 11:43:45 |
O EF Core gera um código GUID ordenado:





O login do hiperlink está visível.

 Senhorio| Publicado em 11/04/2024 15:00:11 |
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com