Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Pourquoi et quand dois-je utiliser SPARSE COLUMN ? (SERVEUR SQL 2008)

Une colonne clairsemée n'utilise pas 4 fois plus d'espace pour stocker une valeur, il utilise un 4 octets supplémentaires (fixe) par valeur non nulle. (Comme vous l'avez déjà dit, un NULL prend 0 espace.)

  • Donc une valeur non nulle stockée dans un bit colonne serait 1 bit + 4 octets =4,125 octets. Mais si 99 % d'entre eux sont NULL, il s'agit toujours d'une économie nette.

  • Une valeur non nulle stockée dans un GUID (UniqueIdentifier) colonne est de 16 octets + 4 octets =20 octets. Donc, si seulement 50 % d'entre eux sont NULL, cela représente toujours une économie nette.

Ainsi, les "économies attendues" dépendent fortement du type de colonne dont nous parlons, et votre estimation du rapport qui sera nul par rapport à non nul. Les colonnes à largeur variable (varchars) sont probablement un peu plus difficiles à prédire avec précision.

Cette page Livres en ligne contient un tableau indiquant quel pourcentage de différents types de données devrait être nul pour que vous vous retrouviez avec un avantage.

Alors quand devriez-vous utiliser une colonne clairsemée ? Lorsque vous vous attendez à ce qu'un pourcentage significatif de lignes ait une valeur NULL. Quelques exemples qui me viennent à l'esprit :

  • Une "date de retour de la commande " dans une table de commandes. Vous pouvez espérer qu'un très faible pourcentage des ventes entraînera des retours de produits.
  • Une "4ème adresse " dans une table d'adresses. La plupart des adresses postales, même si vous avez besoin d'un nom de service et d'un "Care Of", n'ont probablement pas besoin de 4 lignes distinctes.
  • Un "suffixe " dans une table de clients. Un pourcentage assez faible de personnes ont un "Jr." ou "III" ou "Esquire" après leur nom.