Estou ajustando o desempenho de um data warehouse usando índices. Eu sou bastante novo no SQL Server 2014.A Microsoft descreve o seguinte:
"Vemos o índice columnstore clusterizado como o padrão para armazenar grandes tabelas de fatos de data warehousing e esperamos que ele seja usado na maioria dos cenários de data warehousing. Como o índice columnstore clusterizado é atualizável, sua carga de trabalho pode executar um grande número de inserções, atualizações, e excluir operações ". http://msdn.microsoft.com/en-us/library/gg492088.aspx
No entanto, se você ler mais na documentação, encontrará limitações e restrições:
"Não pode ter restrições exclusivas, restrições de chave primária ou restrições de chave estrangeira."
Isso me confunde muito! É uma boa prática (não obrigatória) ter chaves estrangeiras no data warehouse por vários motivos (integridade dos dados, relações visíveis para a camada semântica ...)
Portanto, a Microsoft defende índices columnstore clusterizados para cenários de data warehouse; no entanto, ele não pode lidar com relacionamentos de chave estrangeira ?!
Estou correto nisso? Quais outras abordagens você recomendaria? No passado, usei um índice columnstore não clusterizado em cenários de data warehouse, com descarte e reconstrução para carregamentos de dados. No entanto, o SQL Server 2014 não adiciona nenhum novo valor real aos data warehouses ??
fonte
Respostas:
Você tem muitas perguntas aqui:
P: (A falta de chaves estrangeiras) me confunde muito! É uma boa prática (não obrigatória) ter Fk's no DWH por vários motivos (integridade dos dados, relações visíveis para a camada semântica, ...)
R: Correto, normalmente é uma boa prática ter chaves estrangeiras em um data warehouse. No entanto, os índices columnstore clusterizados ainda não suportam isso.
P: Portanto, a MS defende os índices de armazenamento de colunas em cluster para cenários DWH. No entanto, ele não pode lidar com relacionamentos FK ?!
R: A Microsoft fornece ferramentas. Depende de você como você usa essas ferramentas.
Se o seu maior desafio for a falta de integridade dos dados em seu data warehouse, a ferramenta que você deseja é tabelas convencionais com chaves estrangeiras.
Se o seu maior desafio for o desempenho da consulta e você estiver disposto a verificar sua própria integridade de dados como parte do processo de carregamento, a ferramenta desejada será o índice columnstore clusterizado.
P: No entanto, o SQL 2014 não agrega nenhum valor real para DWH ??
R: Felizmente, o columnstore clusterizado não foi o único recurso novo no SQL Server 2014. Por exemplo, confira o novo estimador de cardinalidade.
P: Por que estou tão bravo e irritado com a maneira como meu recurso favorito foi implementado?
A: Você me pegou - você realmente não fez essa pergunta - mas eu responderei de qualquer maneira. Bem-vindo ao mundo do software de terceiros, onde nem tudo é construído de acordo com suas especificações exatas. Se você se sente apaixonado por uma alteração que gostaria de ver em um produto da Microsoft, consulte Connect.Microsoft.com . É o processo de feedback deles, onde você pode enviar uma alteração, outras pessoas podem votar e, em seguida, a equipe do produto lê e diz por que não a implementou. As vezes. Na maioria das vezes, eles apenas o marcam como "não consertam, funcionam na minha máquina", mas, ei, às vezes você recebe algumas respostas.
fonte
Entendo que você sente algumas peças que costumava estar faltando. Mas isso é apenas porque eles estão desaparecidos.
No entanto, o SQL Server estava sendo usado com êxito quando Chaves Estrangeiras eram apenas um conceito (que implementamos por meio de gatilhos naqueles dias), não uma implementação física, como uma restrição. A integridade referencial declarativa estava presente pelo menos no SQL Server 7.0, mas muito mais fraca que a implementação atual.
Em relação ao valor do Índice de ColumnStore em Cluster, ele fornece um índice e as linhas são atualizáveis. Você pode achar esta discussão valiosa: http://sqlwithmanoj.com/2014/07/24/maintaining-uniqueness-with-clustered-columnstore-index-sql-server-2014/
Manoj ressalta que existe uma maneira de criar uma Visualização Indexada / Materializada no topo desta tabela, com a Chave de Cluster como a PK (1ª coluna da tabela / visualização). Se isso combina com você, é claro, é uma decisão que você deve tomar.
Mas, como Aaron Bertrand e TomTom comentaram, isso tem tudo a ver com melhor desempenho. Se você puder gerenciar os outros problemas que lhe dizem respeito (e acredito que sejam administráveis), você obterá alguns benefícios. Portanto, use o ColumnStore para saber o que é capaz de fazer e gerenciar os recursos ausentes.
fonte
Esta pergunta pertence ao SQL 2014, mas desejo fornecer informações adicionais à luz das alterações feitas no SQL 2016 nos índices columnstore, pois pode ser difícil resolver as limitações em diferentes versões e essa pergunta ainda aparece bastante alta no Google:
Para o SQL 2016, a Microsoft descreve um método para usar índices btree não clusterizados (que agora podem ser adicionados como índices secundários em uma tabela columnstore clusterizada) para impor restrições de chave estrangeira, desde que a restrição seja adicionada antes do índice columnstore: https: // docs .microsoft.com / pt-br / sql / bancos de dados relacionais / índices / columnstore-indexes-design-guidance
Niko Neugebauer também tem um post sobre isso; é realmente possível criar diretamente restrições exclusivas / estrangeiras nas tabelas columnstore (eu tenho aplicado essa abordagem no meu trabalho): http://www.nikoport.com/2015/09/15/columnstore-indexes-part-66- more-clusterstore-columnstore-improvement-in-sql-server-2016 /
fonte