Le bas de mon niveau de connaissances de SQL (Serveur 2008) est limitée, et est maintenant challanged par nos Administrateurs de bases de données. Laissez-moi vous expliquer (je l'ai mentionné évident états dans l'espoir que je suis de droite, mais si vous voyez quelque chose de mal, s'il vous plaît dites-moi), le scénario:
Nous avons un tableau qui contient 'Ordonnances de la Cour" pour les personnes. Quand j'ai créé la table, (Nom: CourtOrder), je l'ai créé comme:
CREATE TABLE dbo.CourtOrder
(
CourtOrderID INT NOT NULL IDENTITY(1,1), (Primary Key)
PersonId INT NOT NULL,
+ around 20 other fields of different types.
)
J'ai ensuite appliqué un index non-cluster de la clé primaire (pour l'efficacité). Mes raisons, c'est que c'est un domaine unique (clé primaire), et doivent être indexés, principalement à des fins de sélection, comme nous l'avons souvent Select from table where primary key = ...
J'ai ensuite appliqué un index CLUSTER sur PersonId. La raison était de grouper les commandes pour une personne en particulier physiquement, comme la grande majorité des travaux est d'obtenir des commandes pour une personne. Donc, select from mytable where personId = ...
J'ai été tiré sur cette maintenant. J'ai dit que nous devrions mettre l'index cluster sur la clé primaire, et l'indice normal sur le personId. Cela semble très étrange pour moi. Tout d'abord, pourquoi voudriez-vous mettre un index cluster sur une colonne unique? qu'est-ce clustering? Certes, c'est un gaspillage de l'index cluster? J'aurais cru un indice normal serait utilisé sur une colonne unique. Aussi, le regroupement de l'indice voudrait dire qu'on ne peut pas en cluster une autre colonne (Un par table, à droite?).
Le raisonnement me dit que je l'avais fait une erreur, c'est qu'ils croient en mettant un index cluster sur la PersonId ferait insère lent. Pour le gain de 5% en vitesse d'un select, nous prendrions à 95% de la dégradation de la vitesse sur les insertions et mises à jour. Est-ce correct et valide?
Ils disent que, parce que nous cluster de la personId, SQL Server a pour réorganiser les données lorsque nous insérer ou de faire un changement à la PersonId.
Alors j'ai demandé, pourquoi serait-SQL, le concept d'un INDEX CLUSTER, si c'est si lent? Est-il aussi lent qu'ils disent? Comment dois-je configurer mon index pour obtenir une performance optimale? J'aurais pensé SELECT est utilisé plus que d'INSÉRER... mais ils disent que nous allons avoir des problèmes de verrouillage sur les plaquettes...
J'espère que quelqu'un pourra m'aider.