Tenho uma aplicação feita em C# que faz a importação de dados em uma série de tablas, a partir da leita de xmls.
São perto de 60 tabelas, que sempre tem seus registros excluídos caso inicie uma nova importação.
Possui uma tabela mãe, que é o registro de referência só para eu saber o nome do arquivo que foi importado, esta tabela é a primeira a receber o insert, ela possui duas chaves, a primária que é um inteiro incrementado pelo sql server e um Id próprio
que é um Guid que eu crio na hora de importar, esta coluna é usada em todas as outras tabelas como chave estrangeira, desta forma eu consigo localizar todos os possíveis registros de um arquivo nas demais tabelas.
As demais tabelas tbm possuem uma coluna de chave primária também inteiro e incrementado pelo sql server.
O comportamento está sendo bastante estranho para mim, porque ao longo dos inserts, percebo que o número de registros não se mantém linear, da metade da importação para frente ele vai diminuindo, até praticamente parar, anteriormente eu havia criado como
chave primária de todas as tabelas um Guid, porém percebi que este tipo de dado usando como PK foi uma escolha péssima, devido ao Sql Server precisar reorganizar a cada insert e isso se tornou impraticável. Minha pergunta é se eu devo neste caso também alterar
as chaves estrangeiras para inteiro para manter o desempenho até o final? Ou se eu deveria criar as chaves de alguma forma só no final? Não como o sql server trabalha com tantos inserts e qual a forma correta dele manter os inserts até o fim.
Versão do banco: Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)
Número de registros da tabela de referência cidata: Tota de 3 milhões de registros