Sei que esse tipo de pergunta surge muito, mas ainda não li argumentos convincentes para me ajudar a tomar essa decisão. Por favor, tenha paciência comigo!
Eu tenho um banco de dados enorme - cresce cerca de 10.000.000 de registros por dia. Os dados são relacionais e, por razões de desempenho, carrego a tabela com BULK COPY. Por esse motivo, preciso gerar chaves para as linhas e não posso confiar em uma coluna IDENTITY.
Um número inteiro de 64 bits - um bigint - é amplo o suficiente para eu usar, mas para garantir a exclusividade, preciso de um gerador centralizado para fazer meus IDs para mim. Atualmente, tenho um serviço desse gerador que permite que um serviço reserve números de sequência X e garanta que não haja colisões. No entanto, uma conseqüência disso é que todos os serviços que eu tenho dependem desse gerador centralizado e, portanto, sou limitado em como posso distribuir meu sistema e não estou satisfeito com as outras dependências (como exigir acesso à rede) impostas por este design. Este tem sido um problema na ocasião.
Agora estou pensando em usar GUIDs seqüenciais como minhas chaves primárias (geradas externamente para SQL). Tanto quanto pude verificar com meus próprios testes, a única desvantagem é a sobrecarga de espaço em disco de um tipo de dados mais amplo (que é exacerbado pelo uso em índices). Eu não testemunhei nenhuma desaceleração discernível no desempenho da consulta, em comparação com a alternativa bigint. Carregar a mesa com BULK COPY é um pouco mais lento, mas não muito. Meus índices baseados em GUID não estão se fragmentando graças à minha implementação sequencial de GUID.
Basicamente, o que eu quero saber é se existem outras considerações que eu possa ter esquecido. No momento, estou inclinado a dar o salto e começar a usar GUIDs. Como não sou especialista em banco de dados, gostaria muito de receber qualquer orientação.