web-dev-qa-db-fra.com

base de données: clé primaire, Clustered ou NonClustered

Je crée une base de données dans 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)
)

Je veux faire de U_Id la clé primaire. Je voudrais demander quelle est la différence entre

 CONSTRAINT pk_UserID PRIMARY KEY (U_Id)

cette

 CONSTRAINT pk_UserID PRIMARY KEY CLUSTERED (U_Id)

et ça

CONSTRAINT pk_UserID PRIMARY KEY NONCLUSTERED (U_Id)

Quand utiliser chacun?

J'ai lu un article mais il n'est toujours pas clair pour moi. Quelqu'un peut-il me donner une explication rapide?

35
YtotheZ

La déclaration suivante:

CONSTRAINT pk_UserID PRIMARY KEY (U_Id)

Est le même que celui-ci:

CONSTRAINT pk_UserID PRIMARY KEY CLUSTERED (U_Id)

La physique des données de table ne peut être ordonnée que par n des index, et par défaut cet index est celui utilisé pour la clé primaire (la contrainte unique de clé primaire est toujours prise en charge par un index).

Si vous souhaitez laisser l'ordre des données de la table à stocker selon un autre index, vous devez créer la clé primaire avec:

CONSTRAINT pk_UserID PRIMARY KEY NONCLUSTERED (U_Id)

Et puis créez l'index cluster avec:

CREATE CLUSTERED INDEX ix_Email ON Users (Email); 
42
PAC