locked
PK Cluster e Non Cluster RRS feed

  • Discussão Geral

  • Pessoal,

    eu tenho uma tabela com 30 milhoes de linhas. Essa tabela nao tem PK, nao sei pq nasceu assim.

    Gostaria de entender sobre PK cluster e non cluster. Pq para mim, quando eu criava uma pk, a pk era do tipo cluster.

    Obrigada pela ajuda,
    Suzana

    quinta-feira, 3 de maio de 2012 21:10

Todas as Respostas

  • Ola Suzana,

    Neste caso há uma diferença entre PK ( Primery Key ) e Indice Cluster ou NonCluster.

    PK é uma restrição( constraint ) que nos ajuda a não ter registros duplicados e nulos ( segundo os campos que compõe a PK ), normalmente quando você cria uma PK, automaticamente o Sql Server cria um incide cluster também.

    Mesmo assim podemos ter também casos onde a PK não é um indice cluster, em uma caso por exemplo onde a tabela é criada sem PK e sem indice, depois um indice cluster é criado em uma coluna e depois uma PK é criada em outra coluna, assim a PK não criara um indice cluster pois uma tabela aceita somente 1 indice cluster.

    A difrença entre um idice cluster e noncluster é basicamente que um indice cluster é o que ordena os dados na tabela ( por isto que so pode ter um indice cluster por tabela ) , já o indice noncluster trabalha com "ponteiros" para indetificar as linhas de dados necessários.

    Segue alguns links para melhor te ajudar nesta questão.

    http://msdn.microsoft.com/pt-br/library/ms190457.aspx

    http://msdn.microsoft.com/pt-br/library/ms177443(v=sql.105).aspx

    http://msdn.microsoft.com/pt-br/library/ms177484(v=sql.105).aspx


    Adriano Nascimento

    quinta-feira, 3 de maio de 2012 22:12
  • Suzana,

    Vale ressaltar que é permitido somente 1 índice cluster por tabela e 254 non cluster.

    Um índice clusterizado é armazenado fisicamente em disco, trabalhando como um catálogo ou dicionário de dados, todas as informações vinculadas com este índice encontra-se armazenadas nos arquivos de dados que formam o banco de dados.

    Já os índices não clusterizados quando utilizados encontram-se em memória, todas as informações vinculadas com este índice são carregadas em memória e pesquisadas através de ponteiros dentro de sua estrutura. Estes índices existem somente no momento de acesso e carga dos dados que estão sendo trabalhados para a tabela que o SQL Server esta fazendo acesso.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    segunda-feira, 7 de maio de 2012 14:00
    Moderador