Quel type de données sql doit-on utiliser des bases numéro de clé primaire:Sql Type de données pour la clé primaire - SQL Server?
- int
- bigint
- numérique
- flotteur
Quel type de données sql doit-on utiliser des bases numéro de clé primaire:Sql Type de données pour la clé primaire - SQL Server?
En général, int
.
bigint
si vous pensez que vous aurez plus de lignes que d'atomes dans l'univers.
uniqueidentifier
est utile si vous avez besoin globalement clés uniques (clés qui sont garantis pour être unique dans toutes les tables de votre schéma, peut-être même unique universel (je ne me souviens pas))
Les deux autres I n'utiliserait pas ils ne sont pas des types intégraux (ils ont des fractions, qui n'ont tout simplement pas beaucoup de sens en tant que clés)
Si vous choisissez un identifiant unique, pensez à en faire une clé primaire NON CLUSTERED, sinon les insertions peuvent avoir des problèmes de performances. – Brannon
Merci pour la mise à niveau, Brannon. –
int est limité «seulement» autour de 2 milliards. J'ai déjà atteint cette limite avec certaines fonctionnalités de journalisation;) – Mose
Une raison majeure pour ne pas utiliser les GUID pour les PK est leur taux de remplissage terrible pour les pages d'index - une telle mauvaise utilisation peut considérablement augmenter vos coûts de performance d'E/S. Les GUID doivent être laissés comme des AK et à la place conduire des requêtes avec des PK dérivés int si possible.
C'est vraiment un peu inexact - GUID comme PK est OK - GUID comme la CLUSTERING KEY est un desaster. Le PK en soi n'a aucun effet sur l'organisation physique des données - c'est le travail de la clé de clustering :) –
pour les processeurs 32 bits, un int est susceptible d'être la taille la plus efficace pour le traitement.
Les limites de mots sont moins pertinentes que l'espace occupé passant de Int à BigInt - sauf si vous attendez un nombre de lignes de plusieurs milliards, sauf row octets et les dépenser ailleurs. Le coût d'E/S est plusieurs ordres plus chers que l'accès à la mémoire. – stephbu
D'accord, je viens d'ajouter une autre raison d'utiliser int. – dkretz
Vous avez vraiment besoin de garder deux questions distinctes: à part
1) la clé primaire est une construction logique - l'un des candidats clés qui identifie de façon unique et fiable d'une ligne dans votre table. Cela peut être quelque chose, vraiment - un INT, un GUID, une chaîne - choisissez ce qui est le plus logique pour votre scénario.
2) regroupement clé (la colonne ou des colonnes qui définissent le « index cluster » sur la table) - c'est un physique chose liée au stockage, et ici, une petite, stable, toujours plus Le type de données est votre meilleur choix - INT ou BIGINT comme option par défaut.
Par défaut, la clé primaire d'une table SQL Server est également utilisée comme clé de clustering - mais cela n'est pas nécessaire! Personnellement, j'ai l'impression de gains de performances massifs au fil du temps lors de la décomposition de la clé Clustered principale GUID précédente en deux clés distinctes: la clé principale (logique) du GUID et la clé de clustering (ID) , 1) colonne.
La fragmentation de l'index était réduite à des niveaux minimaux, et donc la performance de recherche d'index était en hausse - fortement recommandé!
Marc
unsigned int
de taille selon qui répond à vos besoins particuliers
Sauf que le serveur SQL n'a pas de type de données non signé. – Joe
Cela dépend! Dans quel genre de situation? Plus d'informations requises s'il vous plaît ... –