Pergunta sobre database, primary-key, clustered-index, sql-server-2008 – banco de dados: chave primária, agrupada ou não-clusterizada

34

Estou criando um banco de dados no SQL Server 2008,

CREATE TABLE Users
(
    U_Id INT NOT NULL
    FirstName VARCHAR(50) NOT NULL,
    LastName VARCHAR(50) NOT NULL,
    Email VARCHAR(200)
    Password VARCHAR(50)
)

Eu quero fazer U_Id a chave primária. Eu gostaria de perguntar qual é a diferença entre

 CONSTRAINT pk_UserID PRIMARY KEY (U_Id)

isto

 CONSTRAINT pk_UserID PRIMARY KEY CLUSTERED (U_Id)

e isto

CONSTRAINT pk_UserID PRIMARY KEY NONCLUSTERED (U_Id)

Quando usar cada um?

Eu li algum artigo, mas ainda não está claro para mim. Alguém pode me dar uma explicação rápida?

Sua resposta

1   a resposta
40

A seguinte declaração:

CONSTRAINT pk_UserID PRIMARY KEY (U_Id)

É o mesmo que este:

CONSTRAINT pk_UserID PRIMARY KEY CLUSTERED (U_Id)

Você só pode ter a fisicidade de dados da tabela ordenada por1 dos índices e, por padrão, esse índice é o usado para a chave primária (a restrição exclusiva da chave primária é sempre suportada por um índice).

Se você quiser deixar a ordem dos dados da tabela a serem armazenados de acordo com algum outro índice, então você deve criar a chave primária com:

CONSTRAINT pk_UserID PRIMARY KEY NONCLUSTERED (U_Id)

Em seguida, crie o índice clusterizado com:

CREATE CLUSTERED INDEX ix_Email ON Users (Email); 
Chave primária é o identificador de uma linha. Deve ser único e não nulo. Índice agrupado informa ao SQL como armazenar dados no disco. As linhas de dados reais são armazenadas na ordem especificada por este índice. Como também contém dados sobre onde os dados são armazenados no disco, a chave de índice clusterizada é armazenada em todos os índices. Em quase todos os casos, é melhor fazer com que sejam iguais. E é quase sempre melhor que a chave primária seja um identificador para que os dados sejam armazenados em disco sequencialmente. brianfeucht
Esteja ciente de que qualquer índice não clusterizado que você criar sempre incluirá os dados no índice clusterizado (porque é assim que a linha de dados real na tabela é encontrada).Documentos da Microsoft  Portanto, não pense que você estará economizando espaço fazendo com que um índice grande / grande seja o índice clusterizado, a menos que você não tenha nenhum outro índice na tabela. Granger

Perguntas relacionadas