Eu tenho um procedimento armazenado que trunca algumas tabelas com cerca de 1,75M linhas em cada uma, antes de inserir novos dados (com base nos dados de outras tabelas, cálculos etc.)
O esboço básico é muito simples:
- Truncar tabelas
- Insira 1,75M linhas em 'lotes' de cerca de 75.000 por vez.
Gostaria de saber se devo recriar explicitamente os índices a qualquer momento neste processo? por exemplo
- Truncar tabelas
ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90)
[ou algo parecido]- Inserir linhas de 1,75 M
ou talvez
ALTER INDEX ALL ON xxx DISABLE
- Truncar tabelas
- Inserir linhas de 1,75 M
ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90)
[ou algo parecido]
Qualquer assistência apreciada ... não um DBA - um desenvolvedor que conhece muito bem o DB é mais preciso!
sql-server
performance
index
BlueChippy
fonte
fonte
insert into
e, no momento, não háorder by
cláusula, mas eu poderia acrescentar que, se isso ajudasse? ID e Código também são indexados separadamente.Respostas:
Como na maioria das perguntas desse tipo, isso depende. É improvável que você insira os dados na ordem "correta" para todos os índices envolvidos, o que significa que todos esses índices provavelmente encontrarão muitas páginas divididas durante o processo de inserção. Então, vamos supor que você esteja inserindo na ordem do índice em cluster. Você pode desativar todos os índices não agrupados em cluster, truncar, inserir e reconstruir todos os índices não agrupados em cluster. Obviamente, tentar ambas as abordagens dirá a verdade sobre qual é mais rápida, independentemente da teoria por trás dela. :)
fonte
O Plano Básico com todos os índices ativados pode ser lento e resultar em fragmentação.
ALTER INDEX REBUILD em uma tabela truncada e, portanto, vazia não serve para nada; portanto, é necessário alterar seu plano A. Deve ser:
Pode ainda ser lento, mas pelo menos você obtém índices nítidos.
O plano B está bem. Teste todos os três e veja qual é o mais rápido e o que fornece a menor fragmentação do índice. Depois, decida se a reconstrução vale a pena.
fonte