/ / drop index no nível da partição - sql-server, indexing

drop index no nível da partição - sql-server, indexing

Você sabe se existe alguma maneira de fazer isso no SQL Server (2008)?

Eu estou trabalhando em um processo de carregamento do DataWarehouse,Então, o que eu quero fazer é descartar os índices da partição que está sendo carregada para que eu possa executar uma carga em massa rápida e, em seguida, eu possa reconstruir novamente o índice no nível da partição.

Eu acho que no Oracle é possível conseguir isso, mas talvez não no SQL Server.

obrigado, Vencedor

Respostas:

1 para resposta № 1

Não, você não pode descartar os índices de uma tabela por apenas umpartição única. No entanto, o SQL 2008 fornece uma metodologia para carregamento em massa que envolve a configuração de uma segunda tabela com exatamente o mesmo esquema em uma partição separada no mesmo grupo de arquivos, carregando-a, indexando-a precisamente da maneira e "alternando" sua nova partição com uma partição vazia existente na tabela de produção.

Esta é uma descrição altamente simplificada, no entanto. Aqui está o artigo do MSDN para o SQL 2008 sobre como implementar isso: http://msdn.microsoft.com/en-us/library/ms191160.aspx


0 para resposta № 2

Eu sei que não era possível no SQL 2005. Eu não ouvi falar de nada que lhe permitisse fazer isso em 2008, mas poderia estar lá (eu já li, mas ainda não o usei). O mais próximo que consegui foi desabilitar o índice, mas se você desabilitar um índice clusterizado, não poderá mais acessar a tabela. Nem tudo isso é útil, imho.

Minha solução para o nosso projeto Warehouse ETL foicrie uma tabela listando todos os índices e restrições de indexação (PKs, UQs). Durante o ETL, percorremos a tabela (para o conjunto de tabelas desejado sendo carregado), descartar os índices / restrições de indexação, carregar os dados, percorrer a tabela novamente e recriar os índices / restrições. Um pouco feio e um pouco estranho, mas uma vez instalado e funcionando, ele não "quebrará" - e tem a vantagem adicional de índices recém-construídos (isto é, sem fragmentação e fillfactor podem ser 100). Adicionar / modificar / derrubar índices também é desajeitado , mas não tão difícil assim.

Você poderia fazer isso dinamicamente - ler e armazenar odefinições de índices / restrições da tabela de destino, elimine-as, carregue os dados e, em seguida, construa e execute dinamicamente os scripts de (re) criação dos seus dados armazenados. Mas, se algo falhar durante a corrida, você está tão morto. (É por isso que me fixei em tabelas permanentes.)

Eu acho que isso funciona muito bem com o particionamento de tabela, já que você faz todo o trabalho nas tabelas "Carregando", e as tabelas ao vivo (dbo, para nós) são intocadas.