Tenho o privilégio de gerenciar uma grande tabela OLAP particionada. Ao revisar esta tabela, notei que um dos índices não está alinhado com o esquema de particionamento. Como o autor não está disponível e as pesquisas no Google cuidadosamente elaboradas não retornaram nenhum resultado útil, não tenho certeza se isso foi intencional ou acidental.
Existe algum motivo para não particionar o alinhamento de um índice no SQL Server 2008?
Respostas:
A principal vantagem de não particionamento de um índice (não exclusiva) sobre um objecto de base particionado é que ele funciona em torno de uma limitação consulta optimizador de longa data relacionadas com pedidos de dados ordenados, tais como
MIN
,MAX
, ouTOP (n)
consultas.Em um índice particionado, o otimizador geralmente não pode converter
MIN
,MAX
ouTOP (n)
na mesma operação por partição , seguido por um agregado global final sobre os agregados parciais por partição. O otimizador escolhe um plano de execução que varre todas as partições do índice. A exceção é o caso único em que a operação agregada ou superior é especificada na coluna de particionamento.Devo mencionar que também existem boas razões para não ter índices não alinhados. Optar por usar um índice não alinhado teria que ser uma escolha muito informada. Eu já fiz isso sozinho (raramente) no passado, mas em circunstâncias muito específicas em que os benefícios superavam claramente os custos, ou não havia outra alternativa razoável.
Artigo de Itzik Ben-Gan explicando a questão.
fonte
Existe o problema óbvio em torno de algumas restrições (por exemplo, exclusivas) que exigem um índice não alinhado.
Além disso, os índices não alinhados têm um grande custo (principalmente impedem que muitos operadores paralelos entrem em thread por partição e as alternativas custam muito memória) e, portanto, eu recomendaria fortemente esses índices. Mesmo com os casos listados por Paul, eu ainda desaconselharia índices não alinhados.
fonte
Os índices não alinhados negam o principal benefício do particionamento, que é a troca de partições. Se você não depende disso e está particionando por outros motivos (armazenamento diferente, partições somente leitura, estatísticas incrementais, ...), vá em frente e crie um indexex não alinhado.
Índices não alinhados são úteis porque você pode impor restrições exclusivas a toda a tabela. Além disso, índices não alinhados não exigem que a chave de particionamento seja um prefixo de busca implícito. Imagine ter 10000 partições e consultas não baseadas na chave de particionamento. O plano de execução precisará buscar 10000 partições se o índice estiver alinhado. As outras respostas têm mais exemplos.
fonte