Situação
- Armazém de dados no SQL Server 2008 Enterprise
- Heap de mais de 36 milhões de linhas (não pergunte), com mais de 60 colunas
- 750 mil adicionados mensalmente
- Nenhuma chave primária definida (já identifiquei uma)
- Sem compressão
O que estou pensando em fazer (nesta ordem)
- Adicionar compactação no nível da página
- Adicione o PK
- Adicionar um número de índices não clusterizados
- Faça isso o mais rápido possível
Pergunta
- Por fim: devo adicionar o PK ou a compactação da página primeiro? (Isso importa?)
- Se eu adicionar a compactação primeiro à tabela, algum índice herdará as configurações de compactação no nível da tabela? A resposta a esta pergunta específica é "Não, a compactação não é herdada", encontrada aqui em dba.stackexchange
No que estou me inclinando no momento
-- Add page level compression
alter table dbo.TableName
rebuild with (data_compression = page)
;
go
-- Add primary key
alter table dbo.TableName
add constraint PK_TableName
primary key clustered (<Columns>)
;
go
-- Add NC_IXs here
...
...
Eu olhei aqui (documentação de criação de PK) e aqui (documentação de ALTER TABLE) , mas não consigo ver nada definitivo sobre se algum índice herda ou não as configurações de compactação da tabela. A resposta a esta pergunta específica é "Não, a compactação não é herdada", encontrada aqui em dba.stackexchange
O índice clusterizado é, na verdade, a tabela. Supondo que sua chave primária esteja em cluster, eu criaria uma chave primária em cluster com compactação no nível da página, em vez de tentar fazê-lo em duas etapas.
Eu também copiaria cerca de 100 mil linhas para uma tabela temporária (física temporária, não #temporária) e executaria alguns testes. Tente executar a compactação primeiro, a chave clusterizada primeiro, tente fazê-los como uma etapa. Veja o que roda mais rápido. Eu acho que será um passo pessoalmente :).
De qualquer forma, a compactação de página vai embaralhar MUITO os dados. Eu estimaria que fazer a compactação primeiro resultaria em menos E/S geral, pois a operação de clustering lerá páginas compactadas.