Devo reconstruir o índice após a inserção truncada / grande?

10

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!

BlueChippy
fonte
Um pouco mais de informações sobre a estrutura da tabela, os índices existentes hoje e a aparência dos dados inseridos (em uma determinada ordem? Isso está alinhado com o índice em cluster?) Ajudaria. Também presumo que esta tabela esteja indisponível até que este processo seja concluído? É bom saber que há opções para importação em massa.
Mike Walsh
Talvez você deva truncar a inserção da tabela e verificar qual é a sua fragmentação de índice para ver se você precisa ou não.
Zane
v: 2008 Standard. Os dados de origem são várias tabelas temporárias, antes que esses dados sejam carregados do csv, excel, Oracle e outros bancos de dados SQL. As estruturas da tabela são todas idênticas neste estágio: 6 caracteres, 3 caracteres, 10 colunas decimais (20,5). A chave primária é ID + código. Os dados estão sendo carregados insert intoe, no momento, não há order bycláusula, mas eu poderia acrescentar que, se isso ajudasse? ID e Código também são indexados separadamente.
BlueChippy

Respostas:

6

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. :)

Ben Thul
fonte
1

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:

  • TRUNCAR
  • Inserir
  • ALTER INDEX REBUILD

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.

Orbilin
fonte