Une colonne fragmentée ne pas utiliser 4x le montant de l'espace pour stocker une valeur, il utilise un (fixe) 4 octets supplémentaires par valeur non null. (Comme vous l'avez mentionné, NULL prend 0 espace.)
Si une valeur non null stockées dans un peu de la colonne sera de 1 bit + 4 octets = 4.125 octets. Mais si 99% de ces personnes sont NULLES, c'est toujours une épargne nette.
Une valeur non nulle stockées dans un GUID (de type UniqueIdentifier) de la colonne est de 16 octets + 4 octets = 20 octets. Donc, si seulement 50% de ces derniers sont NULS, c'est encore un filet d'épargne.
De sorte que les "économies attendues" dépend fortement de ce type de colonne dont nous parlons, et que votre estimation de ce ratio sera nulle vs non-null. Variable de la largeur des colonnes (varchars) sont sans doute un peu plus difficile à prévoir avec précision.
Cette documentation en Ligne de la Page a un tableau indiquant quel est le pourcentage des différents types de données doivent être null pour vous retrouver avec un avantage.
Donc, quand devriez-vous utiliser une Colonne Fragmentée? Lorsque vous vous attendez à un pourcentage significatif de lignes pour avoir une valeur NULLE. Quelques exemples qui me viennent à l'esprit:
- Un "Ordre de Date de Retour" d'une colonne dans une table de l'ordre. Vous espérez qu'un très petit pourcentage de la vente d'un résultat dans les produits retournés.
- Un "4e Adresse" ligne dans une table d'Adresses. La plupart des adresses postales, même si vous avez besoin d'un nom de Département et de "Soins" n'est probablement pas besoin de 4 lignes distinctes.
- Un "Suffixe" colonne de la table client. Un assez faible pourcentage de personnes qui ont un "Jr" ou "III" ou "Esquire" après leur nom.