AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 312183
Accepted
Nuno
Nuno
Asked: 2022-05-17 02:07:51 +0800 CST2022-05-17 02:07:51 +0800 CST 2022-05-17 02:07:51 +0800 CST

Chave primária não clusterizada e índice clusterizado

  • 772

É meu entendimento que no SQL Server, você pode ter uma Chave Primária que não é clusterizada e ter outro índice que é o clusterizado.

Para mim, isso parece o mesmo que ter apenas uma chave primária e uma chave ÚNICA extra.

Então eu tenho duas perguntas:

  1. se uma chave primária não estiver em cluster, ela armazena todas as colunas com ela? Ou apenas as colunas de chave primária e as colunas que fazem referência ao índice clusterizado?

  2. Acabei de ler que, se o PK não for o índice clusterizado, o índice clusterizado NÃO precisa ser ÚNICO (mas é altamente recomendável). Isso significa que a tabela pode ser "classificada aleatoriamente" nas linhas com a mesma chave?

sql-server index
  • 2 2 respostas
  • 490 Views

2 respostas

  • Voted
  1. Best Answer
    J.D.
    2022-05-17T03:37:10+08:002022-05-17T03:37:10+08:00

    se uma chave primária não estiver em cluster, ela armazena todas as colunas com ela?

    Não, isso é uma característica do índice clusterizado, não da chave primária. Uma chave primária não clusterizada armazenará apenas os campos em que está definida, além dos campos-chave do índice clusterizado.

    ...o índice clusterizado NÃO precisa ser ÚNICO (mas é altamente recomendado). Isso significa que a tabela pode ser "classificada aleatoriamente" nas linhas com a mesma chave?

    As linhas da tabela sempre serão classificadas logicamente pelos campos de índice clusterizados. No caso em que o índice clusterizado não é único e existem duas linhas com os mesmos valores para a chave do índice clusterizado, essas linhas recebem um identificador de linha exclusivo que é armazenado nos bastidores (esse unificador de 4 bytes só é adicionado ao linhas de chave duplicadas). Este é o fator determinante em como eles são classificados em relação uns aos outros.

    Uma razão pela qual alguém pode optar por tornar a chave primária um índice não clusterizado é porque eles encontram benefícios de desempenho em ter os dados classificados logicamente de maneira diferente dos campos que identificam a exclusividade da linha (independentemente de o índice clusterizado ser exclusivo ou não).

    Um exemplo seria se um GUID fosse usado em uma UNIQUEIDENTIFIERcoluna como a chave primária de sua tabela. Os GUIDs são ótimos para exclusividade (na maioria das vezes), mas geralmente não são uma ótima maneira de manter seus dados classificados por causa de seus valores aleatórios . Em vez disso, você pode ter um conjunto natural de campos nessa tabela, nos quais suas consultas normalmente se unem ou filtram, que não são necessariamente exclusivos, o que, em vez disso, cria um bom índice clusterizado. Ou mesmo um conjunto de campos que você normalmente ordena em suas consultas pode ser um candidato a um índice clusterizado, para eliminar uma operação de classificação pesada do plano de consulta. Os dados serão então classificados em uma ordem que faça sentido em vez de pelos valores semi-aleatórios de um GUID.

    Consulte os internos de índices clusterizados do SQL Server com exemplos para obter mais informações sobre como funcionam os índices clusterizados.

    • 4
  2. Dan Guzman
    2022-05-17T03:40:26+08:002022-05-17T03:40:26+08:00

    se uma chave primária não estiver em cluster, ela armazena todas as colunas com ela? Ou apenas as colunas de chave primária e as colunas que fazem referência ao índice clusterizado?

    O tipo de índice, clusterizado ou não clusterizado, determina implicitamente as colunas não-chave armazenadas nos nós folha de índice de árvore b. Isso é verdade independentemente de o índice ser exclusivo ou não, ou oferecer suporte a uma chave primária ou restrição exclusiva.

    Um índice clusterizado organiza a própria tabela como um índice b-tree (em contraste com um heap quando não existe nenhum índice clusterizado). Todas as colunas são armazenadas nos nós folha de um índice clusterizado porque essas são as páginas/linhas de dados reais. O localizador de linha exclusivo é a chave de índice clusterizado mais um exclusivo interno para valores de chave não exclusivos, quando aplicável.

    Um índice não clusterizado armazena as colunas de chave de índice não clusterizado, localizador de linha (chave de índice clusterizado), além de colunas incluídas (se especificadas) nos nós folha de índice.

    Acabei de ler que, se o PK não for o índice clusterizado, o índice clusterizado NÃO precisa ser ÚNICO (mas é altamente recomendável). Isso significa que a tabela pode ser "classificada aleatoriamente" nas linhas com a mesma chave?

    Uma tabela é ordenada logicamente pela chave do índice clusterizado (exclusivo ou não). As linhas com a mesma chave de índice clusterizado serão adjacentes, não aleatórias.

    • 1

relate perguntas

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Quanto "Padding" coloco em meus índices?

  • Como determinar se um Índice é necessário ou necessário

  • O que significa "índice" em RDBMSs? [fechado]

  • Como criar um índice condicional no MySQL?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve