2009-05-04 10 views
4

J'ai lu les différentes questions/réponses qui indiquent que l'index cluster sur une colonne uniqueidentifier est un mauvais choix pour des raisons de performances. Peu importe, je dois utiliser un identifiant unique comme clé primaire, et je ne veux PAS utiliser newsequentialid() car les valeurs générées sont trop similaires les unes aux autres (j'ai besoin de plus d'ID aléatoires pour que les utilisateurs ne puissent pas "deviner" un autre ID).Index clusterisé/non clusterisé sur une colonne d'identificateur unique dans SQL Server

Alors, quel est le meilleur moyen d'indexer ce PK? Même si un index clusterisé sur cette colonne n'est pas idéal, est-il préférable à un index "unique, non-cluster"?

J'utilise SQL Server 2005.

Répondre

9

Tout d'abord, si vous essayez d'utiliser NEWID() pour atteindre aléatoire (plus que de simplement regarder au hasard), vous êtes en difficulté.

Il s'agit généralement d'un choix moins qu'idéal car d'autres index font référence à la clé d'index clusterisée et une clé d'index clusterisée longue dégrade les performances de tous les index. Vous pouvez créer une colonne entière IDENTITY et en faire l'index cluster et créer simplement un index unique non-cluster sur la colonne uniqueidentifier.