O que é um índice agrupado?

15

Eu preciso de uma breve explicação do índice de cluster.

  • O que é um índice em cluster?
  • Quais são as práticas recomendadas para usar o índice em cluster?
Amir Rezaei
fonte
É uma boa idéia usar datas em um índice clusterizado, pois novos dados sempre são anexados ao final da tabela.
Ralph Winters
11
Possivelmente, mas nem sempre.
mrdenny
@ Mrdenny - você poderia elaborar quando isso não seria assim?
Ralph Winters
11
Se as linhas estiverem sendo inseridas fora de ordem. Se a tabela for mais tipicamente consultada pela chave primária. Se a chave primária for uma INT (ou menor) e houver muitos índices não agrupados em cluster na tabela, uma chave em cluster datetime será maior e menos eficiente. Se a tabela nunca for consultada pela coluna da data, usar é como a chave de cluster não valeria a pena, pois apenas os índices não armazenados em cluster seriam usados.
mrdenny
@mrdenny: também se a tabela não tem nenhuma coluna de data (um caso subconjunto do seu último :)
ypercubeᵀᴹ

Respostas:

15

Em termos simples...

Uma lista telefônica: os dados são o índice / o índice é os dados. Para procurar, eu começaria com Rezaei, Amir, por exemplo. Nenhuma pesquisa externa é necessária.

Em termos de banco de dados:

Os dados da tabela e o índice clusterizado são iguais (no SQL Server, também InnoDB, Oracle IOT)

As práticas recomendadas são limitadas, numéricas e aumentam estritamente (pense na coluna IDENTITY ou Autonumber). Tipos de dados como GUIDs não são uma boa ideia

Links para ler (para evitar inchar esta resposta)

Editar, para explicar completamente minhas sugestões de melhores práticas, siga o link no comentário de Eric Humphrey: Rainha da indexação: Kimberly Tripp

gbn
fonte
3
Você também vai querer blog de Kimberly Tripp: sqlskills.com/BLOGS/KIMBERLY/category/Clustered-Index.aspx
Eric Humphrey - lotsahelp
11
E aí reside o problema de aplicar as "melhores práticas" sem contexto. Por exemplo, se o critério de pesquisa principal para uma tabela grande pesquisada com freqüência for um período, sua melhor localização para o índice de cluster será a data em que a pesquisa não será a chave principal. Dizer que a tabela e o índice de cluster são um e o mesmo é um pouco simplista demais. Os dados são realmente armazenados na ordem ditada pelo índice em cluster. Entre outras coisas, isso significa que os índices agrupados são particularmente úteis para pesquisas de intervalo que retornam o conjunto de dados completo.
Russell Steen
2
@ Russell Steen: 1. Incluí links 2. O OP tinha que perguntar, considere em que nível eu lancei essa resposta em 3. Eric Humphrey forneceu um link create. Podemos analisar caso a caso o que nós, caras mais experientes, sabemos e entendemos, mas estamos aqui para ajudar a educar ou sobrecarregar ...?
gbn 26/01
Eu ouvi o que você está dizendo. O problema não está na sua resposta propriamente dita, mas no fato de que pessoas menos experientes que você correm citando e aplicando algo porque é a "melhor prática" sem entender o uso e o contexto para o qual a melhor prática foi escrita. argumentam que sim, estamos aqui para educar e que citar as melhores práticas sem fornecer mais contexto diretamente no post não é tão bom assim.
Russell Steen
2
Oh, apenas notei a SQL-Serveretiqueta, desconsidere.
ypercubeᵀᴹ
3

É um índice nos dados em si, de modo que os registros sejam classificados fisicamente pelo campo em que você tem o índice em cluster. É por isso que você pode ter apenas um Índice de Cluster por tabela.

O índice não clusterizado não é tão rápido para pesquisas, mas você pode ter muitos desses tipos de índices em uma tabela.

kacalapy
fonte
3
Os índices não agrupados em cluster podem ser igualmente eficientes para pesquisas, se o índice não agrupado estiver cobrindo a pesquisa em questão.
Russell Steen
@ Russell Não há como ser mais rápido, pois o índice forçou a ordem de classificação real dos dados. Não existe uma maneira mais simples / rápida para o SQL ou qualquer RDBMS encontrar as informações necessárias.
kacalapy
4
Eu não disse mais rápido. Um índice de cobertura possui todos os dados solicitados na seleção no índice - IN ORDER, em um local separado no disco. Portanto, uma seleção contra um índice de cobertura correspondente nunca atinge a tabela.
Russell Steen
2
Um NCI de cobertura provavelmente será menor, o que significa menos páginas para ler e mais rápido.
Martin Smith
O motivo de ter apenas um índice clusterizado em uma tabela não é uma classificação física, as páginas de índice são sempre classificadas logicamente e a alocação contígua de páginas não é garantida. Você pode ter apenas um índice clusterizado por tabela porque o índice clusterizado é a própria tabela e os índices não clusterizados são as cópias da tabela com as colunas necessárias.
Manoj Pandey