Lorsque vous traitez avec des index, vous devez déterminer ce que votre table va être utilisé pour. Si vous êtes d'abord l'insertion de 1000 lignes une seconde et ne fais pas de l'interrogation, puis un index cluster est un coup à la performance. Si vous faites 1000 requêtes par seconde, puis de ne pas avoir un indice de conduire à une très mauvaise performance. La meilleure chose à faire lorsque vous essayez de paramétrer les requêtes/index consiste à utiliser l'Analyseur de Plan de Requête et le générateur de profils SQL dans SQL Server. Cela va vous montrer où vous êtes en cours d'exécution dans de coûteuses analyses de table ou de performance-bloquants.
Comme pour le GUID vs argument ID, vous pouvez trouver des gens en ligne qui ne jurent que par les deux. J'ai toujours été appris à utiliser le Guid à moins que j'ai une très bonne raison de ne pas. Jeff a un bon post qui parle des raisons pour l'utilisation de Guid: http://www.codinghorror.com/blog/archives/000817.html.
Comme avec la plupart des rien de développement liés, si vous êtes à la recherche pour améliorer les performances il n'y a pas une seule bonne réponse. Cela dépend vraiment de ce que vous essayez d'accomplir et la façon dont vous êtes à la mise en œuvre de la solution. La seule vraie réponse est de tester, tester et tester à nouveau contre des mesures de rendement pour s'assurer que vous respectez vos objectifs.
[Modifier]
@Matt, après avoir fait un peu plus de recherche sur le GUID/ID débat, je suis tombé sur ce post. Comme je l'ai mentionné avant, il n'y a pas une vrai bonne ou de mauvaise réponse. Il dépend de vos besoins de mise en œuvre. Mais ce sont des raisons valables d'utiliser Guid comme clé primaire:
Par exemple, il existe un problème connu comme un "hotspot", où certaines pages de données dans une table est relativement élevée de la monnaie de contention. Fondamentalement, ce qui se passe est la plupart du trafic sur une table (et donc au niveau de la page des verrous) se produit sur une petite zone de la table, vers la fin. Les nouveaux enregistrements toujours aller à ce hotspot, car l'IDENTITÉ est un numéro séquentiel du générateur. Ces inserts sont gênants car ils nécessitent Exlusive verrouillage de page sur la page, ils sont ajoutés à (hotspot). Effectivement cela sérialise tous les inserts à une table grâce à la page mécanisme de verrouillage. NewID() d'autre part ne souffre pas de points chauds. Les valeurs générées à l'aide de la fonction NewID() ne sont séquentielles pour de courtes rafales de plaquettes (où la fonction est appelée, très vite, comme lors d'un multi-ligne insert), ce qui provoque les lignes insérées à se propager de façon aléatoire dans les données de la table des pages au lieu de tout à la fin éliminant ainsi un point d'accès à partir de plaquettes.
Aussi, parce que les plaquettes sont distribuées de façon aléatoire, la chance de fractionnements de page est considérablement réduit. Alors qu'un fractionnement de la page ici, et il n'est pas trop mauvais, les effets ne s'additionnent rapidement. Avec l'IDENTITÉ, la page du Facteur de Remplissage est assez inutile comme un mécanisme de réglage et peut ainsi être fixée à 100% - les lignes ne seront jamais être inséré dans n'importe quelle page, mais le dernier. Avec NewID(), vous pouvez réellement faire de l'utilisation de Facteur de Remplissage de performance activation de l'outil. Vous pouvez définir le Facteur de Remplissage à un niveau qui se rapproche de volume estimé de la croissance de l'indice des reconstructions, et ensuite planifier la reconstruction pendant les heures creuses à l'aide de la commande dbcc réindexer. Ce efficacement les retards les performances de fractionnements de page jusqu'à ce que les heures creuses.
Même si vous pensez que vous pourriez avoir besoin pour activer la réplication de la table en question, alors vous pourriez aussi bien faire de la PK de type uniqueidentifier drapeau et le champ guid comme ROWGUIDCOL. La réplication nécessite un unique évalués champ guid avec cet attribut, et il va ajouter un si il n'en existe aucun. Si un champ existe, alors il suffit d'utiliser l'un des thats là.
Encore un autre avantage énorme pour l'utilisation de Guid pour PKs est le fait que la valeur est en effet garanti unique - et pas seulement parmi toutes les valeurs générées par ce serveur, mais toutes les valeurs générées par tous les ordinateurs - qu'il s'agisse de votre serveur de base de données, serveur web, serveur d'application, ou de l'ordinateur client. À peu près chaque langue moderne a la capacité de générer un guid valide maintenant - en .NET, vous pouvez utiliser le Système.Guid.NewGuid. Ce qui est TRÈS pratique lorsque vous traitez avec cache maître-détail ensembles de données en particulier. Vous n'avez pas à employer fou temporaire de dispositifs de verrouillage juste de relier vos documents avant qu'ils ne soient commis. Vous venez de récupérer un parfaitement valide nouveau Guid du système d'exploitation pour chaque nouvel enregistrement permanent de la valeur de la clé au moment de la création de l'enregistrement.
http://forums.asp.net/t/264350.aspx