A indexação em cluster agora é obrigatória - por quê?

9

Antes, não havia conclusões conclusivas para mim / debates sobre se (sempre) envolvia / evitava índices agrupados.

Bem, eu entendi que eles devem ser usados ​​algumas vezes com propósitos e contexto específicos + adequados.

Requisito de índice clusterizado do banco de dados do SQL Azure :

"O SQL Azure não suporta tabelas sem índices em cluster. Uma tabela deve ter um índice em cluster. Se uma tabela for criada sem uma restrição em cluster, um índice em cluster deverá ser criado antes que uma operação de inserção seja permitida na tabela"

não se encaixa nas conclusões, razões e explicações anteriores.

Qual é a lógica, que eu perdi das explicações anteriores, da onipresença rigidamente imposta de índices agrupados sem nenhuma exceção?

Gennady Vanin Геннадий Ванин
fonte
4
O SQL Azure é diferente do SQL Server como você o conhece. O Azure é um banco de dados distribuído, armazenando seus dados em mais de uma máquina física. É por isso.
11
Observe que na v12 do Serviço de Banco de Dados SQL do Azure, você pode ter uma tabela sem um índice em cluster.
Troy Hunt

Respostas:

11

Leia Dentro do SQL Azure :

O SQL Azure fornece bancos de dados lógicos para armazenamento de dados do aplicativo. Na realidade, os dados de cada assinante são realmente armazenados várias vezes, replicados em três bancos de dados do SQL Server distribuídos em três servidores físicos em um único datacenter. Muitos assinantes podem compartilhar o mesmo banco de dados físico.

As chaves em cluster são necessárias para que as três réplicas dos seus dados possam ser mantidas em sincronia. Sem uma chave, é impossível saber quais linhas foram atualizadas. As pilhas (tabelas sem um índice clusterizado) têm apenas 'chaves' físicas (fileid: pageid: slot) e, como suas três réplicas do banco de dados lógico compartilham o banco de dados físico com outros bancos de dados lógicos, o endereço físico em um servidor não tem significado no outro réplicas, portanto, não é possível replicar pilhas.

Remus Rusanu
fonte
Uma chave (lógica) não precisa residir em um índice em cluster. Pode ser não clusterizado. Talvez a verdadeira razão pela qual um índice em cluster (presumivelmente único?) Seja necessário seja que os heaps usem RIDs, enquanto os índices clusterizados exclusivos não. É isso que você quis dizer?
Nvogel
3
No documento vinculado: "A alta disponibilidade subjacente e a tecnologia de replicação no SQL Azure são baseadas na replicação de linhas da Árvore B". Portanto, mesmo que um heap tenha uma chave NC, você poderá replicar apenas o NC, mas não o próprio heap.
Remus Rusanu
1

O Azure é um sistema distribuído baseado em nuvem em servidores remotos. Os dados provavelmente serão armazenados em várias unidades / servidores, e seria extremamente ineficiente fazer isso em um heap (já que o sistema precisará saber qual máquina verificar, e sem um índice em cluster, essa é uma operação que exige muitos recursos) .

O índice em cluster fornece uma pesquisa para todas as linhas e todos os outros índices na tabela, portanto, sem uma em cada operação do azure, seria uma varredura de tabela em várias máquinas.

JNK
fonte
2
Isso pode ser verdade, mas no momento não é. Leia o artigo que eu linkei, explica como o roteamento de solicitações funciona e por que suas consultas são executadas sempre em uma única caixa e nunca abrangem vários servidores. Ou seja. não há sharding.
Remus Rusanu