Un peut-il TABLE
avoir une clé primaire sans index clusterisé?
Et puis- TABLE
je avoir un index clusterisé sans avoir de clé primaire?
Quelqu'un peut-il me dire brièvement la relation entre la clé primaire et l'index clusterisé?
Un peut-il TABLE
avoir une clé primaire sans index clusterisé?
Et puis- TABLE
je avoir un index clusterisé sans avoir de clé primaire?
Quelqu'un peut-il me dire brièvement la relation entre la clé primaire et l'index clusterisé?
Une clé primaire est un concept logique - c'est l'identifiant unique d'une ligne dans une table. En tant que tel, il a un tas d'attributs - il peut ne pas être nul et il doit être unique. Bien sûr, comme vous êtes susceptible de rechercher souvent des enregistrements par leur identifiant unique, il serait bon d'avoir un index sur la clé primaire.
Un index cluster est un concept physique - c'est 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 voudrez peut-être le faire (par exemple, lorsque votre clé primaire est une combinaison de clés étrangères sur une table de jointure, et que vous ne voulez pas encourir la surcharge de lecture aléatoire du disque lors de l'écriture).
Oui, vous pouvez créer un index clusterisé sur des colonnes qui ne sont pas une clé primaire.
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 feuille. Cela signifie qu'un index clusterisé contient toutes les données de la table. Une table sans index cluster est appelée un tas.
Une clé primaire est un index unique mis en cluster par défaut. Par défaut, cela signifie que lorsque vous créez une clé primaire, si la table n'est pas encore mise en cluster, la clé primaire sera créée en tant qu'index unique en cluster. Sauf si vous spécifiez explicitement l'
nonclustered
option.Un exemple, où
t1
a une clé primairet2
non clusterisée et n'est pas en cluster mais a une clé primaire:Exemple chez SQL Fiddle.
la source
Tout d'abord, jetez un œil aux tables organisées par index et aux index groupés . En fait, je recommande de lire l'intégralité de Use the Index Luke! site depuis le début jusqu'à ce que vous atteigniez le sujet du clustering pour vraiment comprendre ce qui se passe.
Maintenant, à vos questions ...
Oui, utilisez le mot clé NONCLUSTERED lors de la déclaration de votre clé primaire pour créer une table basée sur le tas. Par exemple:
C'est malheureux, car beaucoup de gens semblent accepter simplement 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é).
Contrairement à certains autres SGBD, MS SQL Server vous permettra d'avoir un index de clustering différent de la clé primaire, ou même sans avoir la clé primaire du tout.
L'exemple suivant crée un index de clustering distinct du PK, qui a une contrainte UNIQUE au-dessus, ce que vous voudriez probablement dans la plupart des cas:
Si vous choisissez un index de clustering non unique (à l'aide de
CREATE CLUSTERED INDEX ...
), MS SQL Server le rendra automatiquement unique en lui ajoutant un champ masqué.Veuillez noter que les avantages du clustering sont les plus visibles pour les scans de plage. Si vous utilisez un index de clustering qui ne "s'aligne" pas sur les analyses de plage effectuées par vos applications clientes (par exemple, lorsque vous utilisez trop la colonne masquée mentionnée ci-dessus ou que vous vous mettez en cluster sur une clé de substitution ), vous êtes à peu près vaincre le but du clustering.
Sous MS SQL Server, la clé primaire est également mise en cluster par défaut . Vous pouvez modifier cette valeur par défaut, comme indiqué ci-dessus.
la source
Réponses tirées de MSDN à l'aide d'index en cluster
Une table peut-elle avoir une clé primaire sans index clusterisé? - Oui.
Une TABLE peut-elle avoir un index clusterisé sans clé primaire? - Oui.
Une clé primaire est une contrainte qui garantit l'unicité des valeurs, de sorte qu'une ligne peut toujours être identifiée spécifiquement par cette clé.
Un index est automatiquement attribué à une clé primaire (car les lignes sont souvent «recherchées» par leur clé primaire).
Un index non clusterisé est un ordre logique des lignes, par une (ou plusieurs) de ses colonnes. Considérez-le comme une autre "copie" de la table, triée par les colonnes de l'index.
Un index clusterisé se produit lorsque la table réelle est physiquement triée par une colonne particulière. Une table n'aura pas toujours un index clusterisé (c'est-à-dire que même si elle sera physiquement ordonnée par quelque chose , cette chose peut être indéfinie ). Une table ne peut pas avoir plus d'un index clusterisé, bien qu'elle puisse avoir un seul index groupé composite (c'est-à-dire que la table est physiquement triée par exemple par nom, prénom, date de naissance).
Le PK est souvent (mais pas toujours) un index clusterisé.
la source
Pour ce que cela peut valoir, dans MS SQL Server, toutes les colonnes de la clé primaire doivent être définies comme NOT Null, alors que la création d'un index cluster unique ne l'exige pas. Pas sûr des autres systèmes DB.
la source
Cela ne correspond peut-être pas à cette question, mais certains aspects importants de la clé primaire et des index en cluster sont ->
S'il existe une clé primaire (par défaut, qui est un index clusterisé, mais nous pouvons changer cela) 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 jeu de clés primaires et qu'il existe un index clusterisé, nous ne pouvons pas créer de clé primaire avec Clustered Index.
la source