Abaixo estão alguns comandos T-SQL que estamos executando em uma tabela com alguns bilhões de registros. A maior parte do tamanho do banco de dados é ocupada por 5 tabelas como esta. Qual é a maneira mais rápida de executar essas etapas sem causar problemas? Demora mais de uma hora apenas para executar o 1º comando. Seria mais fácil descartar a tabela inteira e recriá-la? Ou isso não é possível e seguro com tantos dados? Alguém pode pensar em outras ideias para acelerar isso? Estamos apenas tentando truncar os dados e, em seguida, reconstruir a tabela do zero em nosso processo ETL.
DROP INDEX [OF_IDX_ClusteredConcept] ON [dbo].[OBS_FACT] WITH ( ONLINE = OFF )
ALTER TABLE OBS_FACT DROP CONSTRAINT OBS_FACT_PK
ALTER INDEX ALL ON OBS_FACT disable;
-- add new data to OBS_FACT table via ETL process
ALTER TABLE [dbo].[OBS_FACT] ADD CONSTRAINT [OBS_FACT_PK] PRIMARY KEY NONCLUSTERED
(
[ENCOUNTER_NUM] ASC,
[CONCEPT_CD] ASC,
[PROVIDER_ID] ASC,
[START_DATE] ASC,
[MODIFIER_CD] ASC,
[INSTANCE_NUM] ASC
) ON [PRIMARY]
CREATE CLUSTERED INDEX [OF_IDX_ClusteredConcept] ON [dbo].[OBS_FACT]
(
[CONCEPT_CD] ASC
);
-- REBUILD indexes on OBSERVATION_FACT
ALTER INDEX ALL ON OBS_FACT REBUILD
Muitas vezes, o comando drop index causa esse erro no SQL Server Management Studio, se você tentar reiniciar o SQL Server Management Studio em uma janela diferente.
Período de tempo limite de solicitação de bloqueio excedido (Microsoft SQL Server, erro: 1222)
Se você deseja apenas truncar e recarregar os dados, mexer nos índices não é necessariamente útil.
Se você estiver inserindo dados na ordem do Clustered Index, ou seja, em
CONCEPT_CD ASC
ordem, não há nenhuma vantagem real em descartar o Clustered Index. Será muito mais doloroso reconstruí-lo no final em 3 bilhões de linhas do que inserir os dados em seu pedido de índice clusterizado em primeiro lugar.No entanto, se você quiser desabilitar seus índices, isso seria o seguinte:
Criar o seguinte reconstruindo imediatamente seus índices de acordo com seu script é inútil, pois a criação cria o índice. Por que então reconstruir imediatamente?