2009-04-01 7 views
2

Qu'est-ce que l'indexation clusterisée et non clusterisée? Comment indexer une table en utilisant sql server 2000 Enterprise manager?Indexation dans SQL Server

+0

Bonjour, je peux vous expliquer comment créer un index en utilisant le gestionnaire d'entreprise aussi. – Joseph

+0

Avez-vous un élément "Index" dans l'arborescence sous votre table? Si ce n'est pas le cas, vérifiez les propriétés de la table, il peut y avoir un onglet d'index. – Andomar

Répondre

2

Un index clusterisé signifie que les lignes sont classées physiquement par les valeurs de cet index. Un index non clusterisé signifie qu'une table d'index est mise à jour pour permettre une recherche et un tri rapides en fonction de la valeur, mais n'organise pas physiquement les lignes.

Un seul index clusterisé peut exister pour une table et si une clé primaire existe, il s'agit de l'index clusterisé (dans SQL Server).

2

Un index clusterisé définit comment la table réelle est stockée. Les lignes sont stockées de manière à accélérer les recherches sur les champs de l'index clusterisé. (Ils ne sont pas stockés physiquement dans l'ordre de tri des champs d'index, mais dans un binary tree ou quelque chose de similaire.)

Vous ne pouvez avoir qu'un seul index cluster par table. L'index cluster contient tous les champs de la table, par exemple:

indexfield1 - indexfield2 - field2 - field3 - .... 

Un index non cluster est comme une table séparée. Il contient les champs de l'index et une référence aux champs de la table. Par exemple:

secondindexfield1 - secondindexfield2 - reference to table row 

Lors de la recherche d'un index non cluster, serveur SQL trouver la valeur de l'indice, faire une « recherche de signet » à la table, et récupérer les autres champs de ligne à partir de là. C'est pourquoi les index non clusterisés effectuent un peu moins d'index wel puis cluster.

Pour ajouter un index dans SQL Server Management Studio, développez le nœud de table dans la vue d'objet. Faites un clic droit sur "Index" et sélectionnez "New Index".

3

Dans un index clustered sur ID, les lignes de la table sont commandés par ID.

Dans un index non-clustered sur ID, les références aux lignes de la table sont commandés par ID.

Nous pouvons comparer une base de données dans un fichier CSV:

ID,Value 
------- 
1,ReallyReallyLongValue1 
3,ReallyReallyLongValue2 

Dans une table clustered, lorsque l'on insère une nouvelle ligne, nous avons besoin de le presser entre les lignes existantes:

ID,Value 
------- 
1,ReallyReallyLongValue1 
2,ReallyReallyLongValue2 
3,ReallyReallyLongValue3 

, qui est lent à insérer mais rapide à récupérer.

Dans une table non-clustered, nous gardons un fichier d'index de fichier séparé qui commande nos lignes:

Id,RowNumber 
------------ 
1, 1 
3, 2 

Lorsque nous insérons la nouvelle ligne, nous venons de joignons à notre fichier principal et mettre à jour l'index court fichier:

ID,Value 
------- 
1,ReallyReallyLongValue1 
3,ReallyReallyLongValue3 
2,ReallyReallyLongValue2 

Id,RowNumber 
------------ 
1, 1 
2, 3 
3, 2 

, qui est rapide à l'insertion, mais moins efficace à récupérer.

Dans les bases de données réelles, les index utilisent des arbres binaires plus efficaces, mais le principe reste le même.

index en cluster sont plus rapides sur SELECT, les index non-cluster sont plus rapides sur INSERT/UPDATE/DELETE

+0

Je suppose que SQL Server stocke les tables dans un format B-Tree clairsemé. Donc insérer sur un index clusterisé peut être plus efficace, car il suffit de mettre à jour un emplacement (au lieu de la table de base et de l'index) – Andomar

+0

Bien sûr, mais quand il s'agit d'équilibrer l'arborescence, les index non clusterisés sont beaucoup plus efficaces , surtout si vous avez beaucoup de données dans votre tableau. – Quassnoi

+0

L'équilibrage de l'arborescence se produit lors d'une réindexation, pas insérer/mettre à jour/supprimer? Convenir que le réindexage est plus rapide pour un index non-cluster – Andomar

0
  • Index cluster: Un seul index cluster par table est autorisée. Si un index est mis en cluster, cela signifie que la table sur laquelle l'index cluster est basé est physiquement triée en fonction de cet index. Pensez aux numéros de page dans une encyclopédie.

  • Index non cluster: peut contenir plusieurs index non clusterisés par table. Pensez à l'index des mots clés à la fin du livre.