Est-ce qu'un TABLE
avoir une clé primaire sans index en grappe ?
Et est-ce qu'un TABLE
avoir un index en grappe sans avoir de clé primaire ?
Quelqu'un peut-il m'expliquer brièvement la relation entre la clé primaire et l'index clusterisé ?
Est-ce qu'un TABLE
avoir une clé primaire sans index en grappe ?
Et est-ce qu'un TABLE
avoir un index en grappe sans avoir de clé primaire ?
Quelqu'un peut-il m'expliquer brièvement la relation entre la clé primaire et l'index clusterisé ?
Une clé primaire est un logique Il s'agit de l'identifiant unique d'une ligne dans un tableau. En tant que tel, il possède un certain nombre d'attributs : il ne peut pas être nul et il doit être unique. Bien sûr, comme il est probable que vous recherchiez souvent des enregistrements par leur identifiant unique, il serait bon d'avoir un index sur la clé primaire.
Un index en grappe est un physique Il s'agit d'un index qui affecte l'ordre dans lequel les enregistrements sont stockés sur le disque. Cela en fait un index très rapide lors de l'accès aux données, bien qu'il puisse ralentir les écritures si votre clé primaire n'est pas un nombre séquentiel.
Oui, vous pouvez avoir une clé primaire sans index clusterisé - et parfois, vous pouvez le vouloir (par exemple, lorsque votre clé primaire est une combinaison de clés étrangères sur une table de jonction, et que vous ne voulez pas encourir la surcharge de brassage de disque lors de l'écriture).
Oui, vous pouvez créer un index clusterisé sur des colonnes qui ne sont pas des clés primaires.
Bonjour. Le sujet est ancien, mais peut-être que quelqu'un peut répondre à ma question. Si une colonne est déclarée comme NOT NULL UNIQUE CLUSTERED INDEX, est-ce que le fait de la rendre PRIMARY KEY aura un impact sur les performances ou autre chose ?
C'est une question intéressante. Je suppose que non, puisqu'il doit effectuer les mêmes contrôles dans les deux cas.
Une table peut avoir une clé primaire qui n'est pas en cluster, et une table en cluster ne nécessite pas de clé primaire. La réponse aux deux questions est donc oui.
Un index clusterisé stocke toutes les colonnes au niveau des feuilles. Cela signifie qu'un index clusterisé contient toutes les données de la table. Une table sans index clusterisé est appelée un tas.
Une clé primaire est un index unique qui est mis en grappe par défaut. Par défaut signifie que lorsque vous créez une clé primaire, si la table n'est pas encore clusterisée, la clé primaire sera créée comme un index unique clusterisé. À moins que vous ne spécifiez explicitement l'option nonclustered
option.
Un exemple, où t1
a une clé primaire non groupée, et t2
n'est pas en cluster mais possède une clé primaire :
create table t1 (id int not null, col1 int);
alter table t1 add constraint PK_T1 primary key nonclustered (id);
create clustered index IX_T1_COL1 on t1 (col1);
create table t2 (id int not null, col1 int);
alter table t2 add constraint PK_T2 primary key nonclustered (id);
Tout d'abord, jetez un coup d'œil à Tables organisées par index et index en grappe . En fait, je recommande de lire tout le Utilisez l'index Luke ! depuis le début jusqu'à ce que vous atteigniez le sujet du clustering pour vraiment comprendre ce qui se passe.
Maintenant, pour vos questions...
Un TABLEAU peut-il avoir une clé primaire sans index clusterisé ?
Oui, utilisez le mot clé NONCLUSTERED lorsque vous déclarez votre clé primaire pour créer une table basée sur le tas. Par exemple :
CREATE TABLE YOUR_TABLE (
YOUR_PK int PRIMARY KEY NONCLUSTERED
-- Other fields...
);
C'est regrettable, car beaucoup de gens semblent simplement accepter la valeur par défaut (qui est CLUSTERED), même si dans de nombreux cas, une table basée sur le tas serait en fait meilleure (comme indiqué dans l'article lié).
et Un TABLEAU peut-il avoir un index en grappe sans clé primaire ?
Contrairement à d'autres SGBD, MS SQL Server vous permet d'avoir un index de clustering qui est différent de la clé primaire, ou même sans avoir de clé primaire du tout.
L'exemple suivant crée un index de clustering séparé de la PK, qui est surmonté d'une contrainte UNIQUE, ce qui est probablement ce que vous voulez dans la plupart des cas :
CREATE TABLE YOUR_TABLE (
YOUR_PK int PRIMARY KEY,
YOUR_CLUSTERED_KEY int NOT NULL UNIQUE CLUSTERED
-- Other fields...
);
Si vous choisissez un index de mise en grappe non unique (à l'aide de CREATE CLUSTERED INDEX ...
), MS SQL Server le rendra automatiquement unique en lui ajoutant un champ caché.
Veuillez noter que les avantages du clustering sont plus visibles pour les balayages de portée. Si vous utilisez un index de clustering qui n'est pas "aligné" avec les balayages de plage effectués par votre/vos application(s) client(s) (comme lorsque vous vous appuyez trop sur la colonne cachée mentionnée ci-dessus, ou que vous effectuez un clustering sur une clé de substitution ), vous allez à l'encontre de l'objectif du clustering.
Quelqu'un peut-il m'expliquer brièvement la relation entre la clé primaire et l'index clusterisé ?
Sous MS SQL Server, la clé primaire est également en cluster. par défaut . Vous pouvez modifier cette valeur par défaut, comme indiqué ci-dessus.
Réponses tirées de MSDN Utilisation des index en grappe
Un TABLEAU peut-il avoir une clé primaire sans index clusterisé ? - Oui.
Un TABLEAU peut-il avoir un Index en grappe sans clé primaire ? - Oui.
A Clé primaire est un contrainte qui garantit l'unicité des valeurs, de sorte qu'une ligne puisse toujours être identifiée spécifiquement par cette clé.
Un site indice est automatiquement attribué à une clé primaire (car les lignes sont souvent "recherchées" par leur clé primaire).
A indice non groupé est un classement logique des lignes, par une (ou plusieurs) de ses colonnes. Il s'agit en fait d'une autre "copie" de la table, ordonnée selon les colonnes sur lesquelles porte l'index.
A indice groupé c'est lorsque le réel Une table est physiquement ordonnée par une colonne particulière. Une table n'aura pas toujours un index clusterisé (c'est-à-dire qu'elle sera physiquement classée par quelque chose cette chose pourrait être indéfini ). Une table ne peut pas avoir plus d'un index clustered, bien qu'elle puisse avoir un seul index clustered composite (c'est-à-dire que la table est physiquement ordonnée par exemple Nom, Prénom, DOB).
Le PK est souvent (mais pas toujours) un index clusterisé.
Dans SQL Server, la clé primaire sera mise en grappe par défaut - sauf si vous lui demandez explicitement de ne pas l'être. Mais ce n'est qu'un défaut, pas une obligation.
Il ne s'agit peut-être pas d'une réponse à cette question, mais certains aspects importants de la clé primaire et des index en grappe sont les suivants : - 1.
S'il existe une clé primaire (par défaut qui est un index clusterisé, mais nous pouvons le changer) avec un index clusterisé, nous ne pouvons pas créer un autre index clusterisé pour cette table. Mais s'il n'y a pas encore de clé primaire définie, et qu'il existe un index clusterisé, alors nous ne pouvons pas créer de clé primaire avec un index clusterisé.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.