web-dev-qa-db-fra.com

Type de données SQL pour la clé primaire - SQL Server?

Quel type de données sql devrions-nous utiliser pour la clé primaire des bases numériques:

  1. int
  2. bigint
  3. numérique
  4. float
42
Ramesh Soni

Généralement, int.

bigint si vous pensez que vous aurez plus de lignes qu'il n'y a d'atomes dans l'univers.

uniqueidentifier est utile si vous avez besoin de globalement clés uniques (clés qui sont garanties uniques sur toutes les tables de votre schéma, peut-être même universellement uniques (je ne me souviens pas))

Les deux autres que je n'utiliserais pas 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)

55
Ken Gentle

Vous devez vraiment séparer deux problèmes distincts:

1) le clé primaire est une construction logique - l'un des candidats clés qui identifie de manière unique et fiable une ligne de votre table. Cela peut être n'importe quoi, vraiment - un INT, un GUID, une chaîne - choisissez ce qui a le plus de sens pour votre scénario.

2) la clé de clustering (la ou les colonnes qui définissent "l'index clusterisé" sur la table) - ceci est une chose liée au stockage physique, et ici, une petite , le type de données stable et en constante augmentation 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 cluster - mais cela n'a pas besoin d'être ainsi! Personnellement, il me semble que les performances ont considérablement augmenté au fil du temps lors de la décomposition de la clé primaire en cluster principale basée sur GUID en deux clés distinctes - la clé primaire (logique) du GUID et la clé de clustering (commande) sur une IDENTITÉ INT distincte (1 , 1) colonne.

La fragmentation de l'indice était descendue à des niveaux minimaux, et donc les performances de recherche d'index étaient à la hausse - fortement recommandé!

Marc

22
marc_s

Une énorme raison de ne pas utiliser les GUID pour les PK est leur terrible taux de remplissage pour les pages d'index - une telle mauvaise utilisation peut considérablement augmenter vos coûts de performances d'E/S. Les GUID doivent être laissés sous forme d'AK et générer des requêtes avec des PK dérivés dans la mesure du possible.

2
stephbu

pour les processeurs 32 bits, un int est probablement la taille la plus efficace pour le traitement.

0
dkretz

GUID/UUID sont les meilleurs types de champs pour la clé primaire unique d'une table.

0
Muzaffar Mahmood

unsigned int de la taille qui répond à vos besoins particuliers

0
Joe Phillips