O que realmente significam índices agrupados e não agrupados?

1119

Eu tenho uma exposição limitada ao DB e usei o DB apenas como programador de aplicativos. Eu quero saber sobre Clusterede Non clustered indexes. Pesquisei no Google e o que encontrei foi:

Um índice em cluster é um tipo especial de índice que reordena a maneira como os registros na tabela são fisicamente armazenados. Portanto, a tabela pode ter apenas um índice em cluster. Os nós folha de um índice em cluster contêm as páginas de dados. Um índice não clusterizado é um tipo especial de índice no qual a ordem lógica do índice não corresponde à ordem física armazenada das linhas no disco. O nó folha de um índice não clusterizado não consiste nas páginas de dados. Em vez disso, os nós folha contêm linhas de índice.

O que eu achei no SO foi Quais são as diferenças entre um índice em cluster e um não em cluster? .

Alguém pode explicar isso em inglês simples?

PK
fonte

Respostas:

1118

Com um índice em cluster, as linhas são armazenadas fisicamente no disco na mesma ordem que o índice. Portanto, pode haver apenas um índice em cluster.

Com um índice não clusterizado, há uma segunda lista que possui ponteiros para as linhas físicas. Você pode ter muitos índices não agrupados em cluster, embora cada novo índice aumente o tempo necessário para gravar novos registros.

Geralmente, é mais rápido ler de um índice em cluster se você deseja recuperar todas as colunas. Você não precisa ir primeiro para o índice e depois para a tabela.

A gravação em uma tabela com um índice clusterizado pode ser mais lenta, se houver necessidade de reorganizar os dados.

Shiraz Bhaiji
fonte
43
Você deve esclarecer o que quer dizer com "fisicamente".
Spencer Ruport 09/08/09
142
fisicamente como nos bits reais armazenados no disco
Peter
17
Consulte msdn "Quando você cria uma restrição PRIMARY KEY, um índice clusterizado exclusivo na coluna ou colunas é criado automaticamente se um índice clusterizado da tabela ainda não existir", o que significa que não é necessário que seja a mesma coluna.
Ming
46
@ Pet não é esse o caso. O SQL Server certamente não garante que todos os arquivos de dados sejam dispostos em uma área física contígua do disco e que haja zero fragmentação do sistema de arquivos. Nem sequer é verdade que um índice em cluster está em ordem no arquivo de dados. O grau em que esse não é o caso é o grau de fragmentação lógica.
Martin Smith
42
Apenas um comentário rápido para fazer backup do argumento de Martin Smith - índices agrupados não garantem armazenamento seqüencial no disco. Gerenciar exatamente onde os dados são colocados no disco é o trabalho do sistema operacional, não o DBMS. Mas sugere que os itens sejam pedidos geralmente de acordo com a chave de cluster. O que isso significa é que, se o banco de dados cresce 10 GB, por exemplo, o sistema operacional pode decidir colocar esses 10 GB em pedaços de 5x2 GB em diferentes partes do disco. Uma tabela agrupada que cubra os 10 GB será armazenada seqüencialmente em cada bloco de 2 GB; esses blocos de 2 GB NÃO PODEM ser seqüenciais no entanto.
blobbles 25/03
601

Um índice em cluster significa que você está dizendo ao banco de dados para armazenar valores próximos realmente próximos um do outro no disco. Isso tem o benefício de uma rápida verificação / recuperação de registros que se enquadram em algum intervalo de valores de índice em cluster.

Por exemplo, você tem duas tabelas, Cliente e Pedido:

Customer
----------
ID
Name
Address

Order
----------
ID
CustomerID
Price

Se você deseja recuperar rapidamente todos os pedidos de um cliente em particular, convém criar um índice em cluster na coluna "Identificação do Cliente" da tabela Pedido. Dessa forma, os registros com o mesmo Código do Cliente serão fisicamente armazenados próximos um do outro no disco (clusterizado), o que acelera sua recuperação.

PS O índice no CustomerID obviamente não será exclusivo, portanto, é necessário adicionar um segundo campo para "unificar" o índice ou deixar o banco de dados cuidar disso para você, mas isso é outra história.

Em relação a vários índices. Você pode ter apenas um índice em cluster por tabela, pois isso define como os dados são organizados fisicamente. Se você deseja uma analogia, imagine uma sala grande com muitas mesas. Você pode colocar essas tabelas para formar várias linhas ou reuni-las para formar uma grande mesa de conferência, mas não nos dois sentidos ao mesmo tempo. Uma tabela pode ter outros índices; eles apontarão para as entradas no índice clusterizado que, por sua vez, dirão finalmente onde encontrar os dados reais.

csano
fonte
4
Dito isto, o IC deve ser sempre usado para PK
mko
4
Portanto, com um índice em cluster, são os registros no índice ou na tabela armazenados juntos?
Caltor
5
@Caltor A tabela. O índice é ordenado por definição. Por exemplo, uma btree seria ordenada para que se possa simplesmente fazer a aritmética do endereço para pesquisar. A idéia do cluster é atender à tabela com o desempenho de um índice específico. Para ficar claro, os registros da tabela serão reordenados para corresponder à ordem em que o índice está originalmente .
FLGMwt
9
@ Caltor Nem um pouco! De fato, a documentação e o próprio nome são bastante enganadores. Ter um "índice clusterizado" realmente tem muito pouco a ver com o índice. Conceitualmente, o que você realmente tem é "uma tabela agrupada no índice x ".
FLGMwt
3
@ JohnOrtizOrdoñez: Claro, você pode usar quase qualquer que está armazenado em-linha, de modo nenhum XML, VARCHAR(MAX)ou VARBINARY(MAX). Observe que geralmente faz sentido agrupar primeiro o campo de data , pois um índice agrupado é mais eficiente para varreduras de intervalo, que são mais comuns em tipos de datas. YMMV.
317

No armazenamento orientado a linhas do SQL Server, os índices clusterizados e não clusterizados são organizados como árvores B.

insira a descrição da imagem aqui

( Fonte da imagem )

A principal diferença entre índices agrupados e índices não agrupados é que o nível folha do índice agrupado é a tabela. Isso tem duas implicações.

  1. As linhas nas páginas de folha de índice em cluster sempre contêm algo para cada uma das colunas (não esparsas) da tabela (o valor ou um ponteiro para o valor real).
  2. O índice clusterizado é a cópia principal de uma tabela.

Os índices não agrupados também podem fazer o ponto 1 usando a INCLUDEcláusula (Desde o SQL Server 2005) para incluir explicitamente todas as colunas não-chave, mas são representações secundárias e sempre há outra cópia dos dados (a própria tabela).

CREATE TABLE T
(
A INT,
B INT,
C INT,
D INT
)

CREATE UNIQUE CLUSTERED INDEX ci ON T(A,B)
CREATE UNIQUE NONCLUSTERED INDEX nci ON T(A,B) INCLUDE (C,D)

Os dois índices acima serão quase idênticos. Com as páginas de índice de nível superior que contêm valores para as colunas-chave A,Be as páginas de nível de folha que contêmA,B,C,D

Pode haver apenas um índice em cluster por tabela, porque as próprias linhas de dados podem ser classificadas em apenas uma ordem.

A citação acima dos manuais online do SQL Server causa muita confusão

Na minha opinião, seria muito melhor redigido como.

Pode haver apenas um índice em cluster por tabela, porque as linhas no nível da folha do índice em cluster são as linhas da tabela.

A cotação on-line dos livros não está incorreta, mas você deve deixar claro que a "classificação" de índices não agrupados e agrupados não é lógica. Se você ler as páginas no nível da folha seguindo a lista vinculada e ler as linhas na página na ordem da matriz de slots, você lerá as linhas de índice na ordem classificada, mas fisicamente as páginas podem não ser classificadas. A crença comum de que, com um índice em cluster, as linhas sempre são armazenadas fisicamente no disco na mesma ordem em que a chave de índice é falsa.

Isso seria uma implementação absurda. Por exemplo, se uma linha é inserida no meio de uma tabela de 4 GB, o SQL Server não precisa copiar 2 GB de dados no arquivo para liberar espaço para a linha recém-inserida.

Em vez disso, ocorre uma divisão da página. Cada página no nível folha dos índices em cluster e não em cluster tem o endereço ( File:Page) da página seguinte e anterior em ordem lógica. Essas páginas não precisam ser contíguas ou em ordem de chave.

por exemplo, a cadeia de páginas vinculada pode ser 1:2000 <-> 1:157 <-> 1:7053

Quando ocorre uma divisão de página, uma nova página é alocada de qualquer lugar do grupo de arquivos (de uma extensão mista, para tabelas pequenas ou de uma extensão uniforme não vazia pertencente a esse objeto ou de uma extensão uniforme recém-alocada). Pode até não estar no mesmo arquivo se o grupo de arquivos contiver mais de um.

O grau em que a ordem lógica e a contiguidade diferem da versão física idealizada é o grau de fragmentação lógica.

Em um banco de dados recém-criado com um único arquivo, executei o seguinte.

CREATE TABLE T
  (
     X TINYINT NOT NULL,
     Y CHAR(3000) NULL
  );

CREATE CLUSTERED INDEX ix
  ON T(X);

GO

--Insert 100 rows with values 1 - 100 in random order
DECLARE @C1 AS CURSOR,
        @X  AS INT

SET @C1 = CURSOR FAST_FORWARD
FOR SELECT number
    FROM   master..spt_values
    WHERE  type = 'P'
           AND number BETWEEN 1 AND 100
    ORDER  BY CRYPT_GEN_RANDOM(4)

OPEN @C1;

FETCH NEXT FROM @C1 INTO @X;

WHILE @@FETCH_STATUS = 0
  BEGIN
      INSERT INTO T (X)
      VALUES        (@X);

      FETCH NEXT FROM @C1 INTO @X;
  END

Em seguida, verifique o layout da página com

SELECT page_id,
       X,
       geometry::Point(page_id, X, 0).STBuffer(1)
FROM   T
       CROSS APPLY sys.fn_PhysLocCracker( %% physloc %% )
ORDER  BY page_id

Os resultados estavam por todo o lado. A primeira linha na ordem das chaves (com o valor 1 - destacada com a seta abaixo) estava quase na última página física.

insira a descrição da imagem aqui

A fragmentação pode ser reduzida ou removida reconstruindo ou reorganizando um índice para aumentar a correlação entre ordem lógica e ordem física.

Depois de correr

ALTER INDEX ix ON T REBUILD;

Eu tenho o seguinte

insira a descrição da imagem aqui

Se a tabela não tiver um índice clusterizado, ela será chamada de heap.

Os índices não clusterizados podem ser criados em um heap ou em um índice clusterizado. Eles sempre contêm um localizador de linhas de volta à tabela base. No caso de um heap, esse é um identificador de linha físico (rid) e consiste em três componentes (Arquivo: Página: Slot). No caso de um índice em cluster, o localizador de linhas é lógico (a chave de índice em cluster).

Para o último caso, se o índice não agrupado já incluir naturalmente as colunas-chave do IC como colunas-chave NCI ou INCLUDE-d, nada será adicionado. Caso contrário, as colunas-chave do IC ausentes serão adicionadas silenciosamente ao NCI.

O SQL Server sempre garante que as colunas-chave sejam exclusivas para os dois tipos de índice. O mecanismo no qual isso é imposto para índices não declarados como exclusivos difere entre os dois tipos de índice.

Os índices agrupados são uniquifieradicionados a todas as linhas com valores-chave que duplicam uma linha existente. Este é apenas um número inteiro ascendente.

Para índices não agrupados em cluster não declarados como exclusivos, o SQL Server adiciona silenciosamente o localizador de linhas à chave de índice não agrupado. Isso se aplica a todas as linhas, não apenas àquelas que são realmente duplicadas.

A nomenclatura em cluster vs não em cluster também é usada para índices de armazenamento de colunas. O artigo Aprimoramentos nos armazenamentos de colunas do SQL Server declara

Embora os dados do armazenamento de colunas não sejam realmente "agrupados" em nenhuma chave, decidimos manter a convenção tradicional do SQL Server de se referir ao índice primário como índice agrupado.

Martin Smith
fonte
8
@brainstorm sim, eu estou ciente disso. Provavelmente isso é por causa do fraseado sobre esta página MSDN , mas ao ver que o fraseado lá é um pouco enganador você só precisa olhar para os temas de fragmentação
Martin Smith
12
@brainstorm: É incrível como algumas declarações falsas são repetidas como evangelho. Um cluster indica que, pelo menos da perspectiva das leituras seqüenciais, seria "desejável" ter as linhas armazenadas fisicamente em disco na mesma ordem que o índice , mas isso está longe de dizer que isso fará com que elas realmente ser armazenado dessa maneira.
Supercat
5
@MartinSmith Reproduzi e confirmei os resultados do seu teste em SQL Server 2014. Eu recebo a 95%fragmentação do índice após a inserção inicial. Após index rebuilda fragmentação foi 0%e os valores foram ordenados. Eu estou pensando, podemos dizer isso The only time the data rows in a table are stored in sorted order is when its clustered index fragmentation is 0?
gotqn 31/07/2015
8
@ MartinSmith Agora, senhor, esta é uma resposta. Eu adoraria vê-lo no topo da lista de respostas, mas, como diz o SO, "rápido e simples" recebe a votação.
vaitrafra
5
@Manachi, essa resposta foi dada cinco anos após a pergunta original. O objetivo disso é corrigir alguns aspectos enganosos dessas respostas. Os caprichos (agora com 8 anos) do OP não são uma preocupação minha. Outros leitores podem apreciar uma visualização de nível inferior.
Martin Smith
150

Sei que essa é uma pergunta muito antiga, mas pensei em oferecer uma analogia para ajudar a ilustrar as boas respostas acima.

ÍNDICE CLUSTERED

Se você entrar em uma biblioteca pública, verá que os livros estão todos organizados em uma ordem específica (provavelmente o Sistema Decimal de Dewey, ou DDS). Isso corresponde ao "índice agrupado" dos livros. Se o número do DDS do livro que você deseja fosse 005.7565 F736s, você começaria localizando a linha de estantes rotuladas 001-099ou algo parecido. (Esse sinal de endcap no final da pilha corresponde a um "nó intermediário" no índice.) Eventualmente, você pesquisaria detalhadamente a prateleira específica rotulada 005.7450 - 005.7600e pesquisaria até encontrar o livro com o número de DDS especificado e em Nesse ponto, você encontrou seu livro.

ÍNDICE NÃO CLUSTRADO

Mas se você não entrou na biblioteca com o número DDS do seu livro memorizado, precisaria de um segundo índice para ajudá-lo. Antigamente, você encontrava na frente da biblioteca um maravilhoso escritório de gavetas conhecido como "Catálogo de Cartas". Nele havia milhares de cartões 3x5 - um para cada livro, classificados em ordem alfabética (talvez por título). Isso corresponde ao "índice não agrupado" . Esses catálogos de cartões foram organizados em uma estrutura hierárquica, de modo que cada gaveta fosse rotulada com o intervalo de cartões que ele continha ( Ka - Klpor exemplo; o "nó intermediário"). Mais uma vez, você pesquisaria até encontrar seu livro, mas, nesse caso, depois de encontrá-lo (ou seja, o "nó da folha"), você não terá o livro em si,número de índice (o número do DDS) com o qual você pode encontrar o livro real no índice em cluster.

Obviamente, nada impediria o bibliotecário de fotocopiar todos os cartões e classificá-los em uma ordem diferente em um catálogo de cartões separado. (Normalmente, havia pelo menos dois desses catálogos: um classificado pelo nome do autor e um pelo título.) Em princípio, você pode ter quantos desses índices "não agrupados em cluster" desejar.

kmote
fonte
2
Eu poderia, talvez, estender essa analogia para descrever as colunas "Incluídas" , que podem ser usadas com índices não agrupados: Pode-se imaginar um cartão no catálogo de cartões incluindo mais do que apenas um livro, mas uma lista de todas as publicações versões do livro, organizadas numericamente por data de publicação. Assim como em uma "coluna incluída", essas informações são armazenadas apenas no nível da folha (reduzindo assim o número de cartões que o bibliotecário deve criar).
kmote
1
ótima analogia - realmente ajuda a visualizá-la!
Denis
71

Abaixo, algumas características dos índices agrupados e não agrupados:

Índices agrupados

  1. Índices em cluster são índices que identificam exclusivamente as linhas em uma tabela SQL.
  2. Toda tabela pode ter exatamente um índice em cluster.
  3. Você pode criar um índice em cluster que cubra mais de uma coluna. Por exemplo: create Index index_name(col1, col2, col.....).
  4. Por padrão, uma coluna com uma chave primária já possui um índice em cluster.

Índices não agrupados

  1. Índices não agrupados são como índices simples. Eles são usados ​​apenas para recuperação rápida de dados. Não tenho certeza de ter dados exclusivos.
Anirudh Sood
fonte
34
Uma pequena correção ao Ponto 1. Um índice agrupado que não necessariamente identificar exclusivamente as linhas em uma tabela SQL. Essa é a função de uma chave primária
Nigel
4
@ Nigel, uma CHAVE PRIMÁRIA ou um ÍNDICE ÚNICO?
anar Khalilov
resposta prática e direta, obrigado @Anirudh Sood
Oscar Romero
50

Uma regra prática não-técnica muito simples seria que os índices agrupados são geralmente usados ​​para sua chave primária (ou, pelo menos, uma coluna exclusiva) e que os não agrupados são usados ​​para outras situações (talvez uma chave estrangeira) . De fato, o SQL Server, por padrão, criará um índice clusterizado em suas colunas de chave primária. Como você aprendeu, o índice de cluster se relaciona à maneira como os dados são classificados fisicamente no disco, o que significa que é uma boa opção geral para a maioria das situações.

Dan Diplo
fonte
47

Índice agrupado

Um índice clusterizado determina a ordem física de DATA em uma tabela.Por esse motivo, uma tabela possui apenas 1 índice clusterizado.

  • " dicionário " Não há necessidade de nenhum outro índice, já é o índice de acordo com as palavras

Índice não clusterizado

Um índice não agrupado é análogo a um índice em um livro. Os dados são armazenados em um único local. O índice está armazenando em outro local e o índice possui ponteiros para o local de armazenamento dos dados.Por esse motivo, uma tabela possui mais de 1 índice não clusterizado.

  • " Livro de química " ao olhar para a frente, há um índice separado para apontar a localização do capítulo e no "END" há outro índice apontando a localização comum das PALAVRAS
abdul rehman kk
fonte
6

Índice agrupado

Os índices agrupados classificam e armazenam as linhas de dados na tabela ou exibição com base em seus valores-chave. Estas são as colunas incluídas na definição de índice. Pode haver apenas um índice em cluster por tabela, porque as próprias linhas de dados podem ser classificadas em apenas uma ordem.

O único momento em que as linhas de dados de uma tabela são armazenadas em ordem classificada é quando a tabela contém um índice em cluster. Quando uma tabela possui um índice em cluster, ela é chamada de tabela em cluster. Se uma tabela não tiver um índice clusterizado, suas linhas de dados serão armazenadas em uma estrutura não ordenada chamada heap.

Não clusterizado

Os índices não clusterizados têm uma estrutura separada das linhas de dados. Um índice não clusterizado contém os valores da chave do índice não clusterizado e cada entrada do valor da chave possui um ponteiro para a linha de dados que contém o valor da chave. O ponteiro de uma linha de índice em um índice não clusterizado para uma linha de dados é chamado de localizador de linhas. A estrutura do localizador de linhas depende se as páginas de dados são armazenadas em um heap ou em uma tabela em cluster. Para um heap, um localizador de linhas é um ponteiro para a linha. Para uma tabela em cluster, o localizador de linhas é a chave de índice em cluster.

Você pode adicionar colunas não chave ao nível da folha do índice não clusterizado para ignorar os limites existentes da chave de índice e executar consultas totalmente cobertas, indexadas. Para mais informações, consulte Criar índices com colunas incluídas. Para obter detalhes sobre os limites da chave de índice, consulte Especificações de capacidade máxima para o SQL Server.

Referência: https://docs.microsoft.com/en-us/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-descript

marvelTracker
fonte
4

Deixe-me oferecer uma definição de livro didático sobre "índice de clustering", extraída da 15.6.1 de Sistemas de banco de dados: o livro completo :

Também podemos falar de índices de cluster , que são índices em um atributo ou atributos, de modo que todas as tuplas com um valor fixo para a chave de pesquisa desse índice apareçam em aproximadamente o menor número possível de blocos.

Para entender a definição, vamos dar uma olhada no Exemplo 15.10 fornecido pelo livro:

Uma relação R(a,b)que é classificada no atributo ae armazenada nessa ordem, compactada em blocos, certamente está agrupada. Um índice on aé um índice de clustering, pois para um determinado avalor a1, todas as tuplas com esse valor asão consecutivas. Eles, portanto, aparecem compactados em blocos, exceto possivelmente o primeiro e o último bloco que contêm o avalor a1, conforme sugerido na Fig.15.14. No entanto, é improvável que um índice em b esteja em cluster, pois as tuplas com um bvalor fixo serão espalhadas por todo o arquivo, a menos que os valores de ae bestejam intimamente correlacionados.

Fig 15.14

Observe que a definição não impõe que os blocos de dados tenham que ser contíguos no disco; diz apenas que as tuplas com a chave de pesquisa são compactadas no menor número possível de blocos de dados.

Um conceito relacionado é uma relação em cluster . Uma relação é "agrupada" se suas tuplas forem agrupadas em tão poucos blocos quanto possível. Em outras palavras, da perspectiva de um bloco de disco, se ele contém tuplas de relações diferentes, essas relações não podem ser agrupadas (ou seja, existe uma maneira mais compacta de armazenar essa relação, trocando as tuplas dessa relação de outros blocos de disco com o tuplas não pertencem à relação no bloco de disco atual). Claramente, R(a,b)no exemplo acima, está agrupado.

Para conectar dois conceitos, uma relação em cluster pode ter um índice de cluster e um índice sem cluster. No entanto, para relações sem cluster, o índice de cluster não é possível, a menos que o índice seja construído sobre a chave primária da relação.

"Cluster" como uma palavra é spam em todos os níveis de abstração do lado de armazenamento do banco de dados (três níveis de abstração: tuplas, blocos, arquivo). Um conceito chamado " arquivo em cluster ", que descreve se um arquivo (uma abstração para um grupo de blocos (um ou mais blocos de disco)) contém tuplas de uma relação ou relações diferentes. Não está relacionado ao conceito de índice de cluster, pois está no nível do arquivo.

No entanto, alguns materiais de ensino gostam de definir o índice de clustering com base na definição do arquivo em cluster. Esses dois tipos de definições são os mesmos no nível de relação em cluster, independentemente de eles definirem relação em cluster em termos de bloco ou arquivo de disco de dados. No link deste parágrafo,

Um índice no (s) atributo (s) A em um arquivo é um índice de cluster quando: Todas as tuplas com valor de atributo A = a são armazenadas sequencialmente (= consecutivamente) no arquivo de dados

Armazenar tuplas consecutivamente é o mesmo que dizer "tuplas são agrupadas em tão poucos blocos quanto possível para conter essas tuplas" (com uma pequena diferença em um falando sobre arquivo e o outro sobre disco). É porque armazenar tuplas consecutivamente é o caminho para atingir "empacotado aproximadamente o menor número possível de blocos que possam conter essas tuplas".

xxks-kkk
fonte
3

Índice agrupado: a restrição de chave primária cria o índice agrupado automaticamente se ainda não existir um índice agrupado na tabela. Os dados reais do índice clusterizado podem ser armazenados no nível da folha do Índice.

Índice não clusterizado : os dados reais do índice não clusterizado não são encontrados diretamente no nó folha, mas precisam ser executados uma etapa adicional para encontrar, pois possuem apenas valores de localizadores de linhas apontando para dados reais. O índice não agrupado não pode ser classificado como índice agrupado. Pode haver vários índices não agrupados por tabela, na verdade isso depende da versão do servidor sql que estamos usando. Basicamente, o Sql server 2005 permite 249 índices não clusterizados e para versões acima como 2008, 2016, permite 999 índices não clusterizados por tabela.

Abhishek Duppati
fonte
2

Índice em cluster - Um índice em cluster define a ordem em que os dados são fisicamente armazenados em uma tabela. Os dados da tabela podem ser classificados apenas de maneira, portanto, pode haver apenas um índice em cluster por tabela. No SQL Server, a restrição de chave primária cria automaticamente um índice em cluster nessa coluna específica.

Índice não clusterizado- Um índice não clusterizado não classifica os dados físicos dentro da tabela. De fato, um índice não clusterizado é armazenado em um local e os dados da tabela são armazenados em outro local. É semelhante a um livro em que o conteúdo do livro está localizado em um local e o índice em outro. Isso permite mais de um índice não agrupado por tabela. É importante mencionar aqui que dentro da tabela os dados serão classificados por um índice agrupado. No entanto, dentro do índice não agrupado, os dados são armazenados na ordem especificada. O índice contém valores de coluna nos quais o índice é criado e o endereço do registro ao qual o valor da coluna pertence.Quando uma consulta é emitida em uma coluna na qual o índice é criado, o banco de dados primeiro acessa o índice e procura por o endereço da linha correspondente na tabela. Ele irá para o endereço da linha e buscará outros valores da coluna. É devido a essa etapa adicional que os índices não agrupados em cluster são mais lentos que os índices agrupados

Diferenças entre índice agrupado e não agrupado

  1. Pode haver apenas um índice em cluster por tabela. No entanto, você pode criar vários índices não agrupados em cluster em uma única tabela.
  2. Os índices agrupados classificam apenas as tabelas. Portanto, eles não consomem armazenamento extra. Os índices não agrupados em cluster são armazenados em um local separado da tabela real, reivindicando mais espaço de armazenamento.
  3. Os índices agrupados são mais rápidos que os índices não agrupados, pois não envolvem nenhuma etapa extra de pesquisa.

Para mais informações, consulte este artigo.

Santhoopa Jayawardhana
fonte