Pourquoi & Quand devrais-je utiliser la COLONNE FRAGMENTÉE? (SQL SERVER 2008)
Après en passant par quelques tutoriels sur SQL SERVER 2008 nouvelle fonction COLONNE FRAGMENTÉE, j'ai trouvé qu'il ne prend pas tout l'espace si la valeur de la colonne est 0 ou null mais quand il y a une valeur, il faut 4 fois en l'espace de façon régulière(non fragmentée) colonne contient.
Si ma compréhension est correcte, alors pourquoi je vais aller pour qu'au moment de la conception de base de données?
Et si j'utilise, à quel situation je être?
Aussi par curiosité, comment viennent pas de l'espace obtenir de réserve lorsqu'une colonne est définie comme étant incomplet de la colonne(je veux dire, qu'est-ce que la mise en œuvre interne pour qu')
Merci d'avance
Vous devez vous connecter pour publier un commentaire.
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.)
Donc une valeur non null stockées dans un peu colonne est 1 peu + de 4 octets = 4.125 octets. Mais si 99% de ces personnes sont NULLES, c'est toujours une épargne nette.
Une valeur non null stockées dans un GUID (de type UniqueIdentifier) 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 que genre de la 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.
Ce La Documentation En Ligne De La Page a un tableau montrant quel est le pourcentage de 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:
Stocker une valeur null dans une colonne fragmentée prend pas de place du tout.
À n'importe quelle application externe de la colonne se comportent de la même
Colonnes fragmentées marche vraiment bien, avec des index filtrés que vous ne souhaitez créer un index pour faire face à la non-attributs vides dans la colonne.
Vous pouvez créer un jeu de colonnes sur les colonnes fragmentées qui renvoie un xml clip de tous les non-null données de colonnes couvertes par le jeu. La colonne ensemble se comporte comme une colonne elle-même. Remarque: vous pouvez seulement avoir un jeu de colonnes par table.
De Capture de Données modifiées de la réplication Transactionnelle et les deux fonctionnent, mais pas la colonne définit la fonction.
Inconvénients
Si une colonne fragmentée dispose de données, il passer de 4 octets de plus que normale de la colonne par exemple même un peu (0.125 octets normalement) est de 4,125 octets et l'identificateur unique s'élève formulaire de 16 octets 20 octets.
Pas tous type de données peuvent être dispersés: text, ntext, image, l'horodatage, le type de données utilisateur, la géométrie, la géographie ou varbinray (max) avec l'attribut FILESTREAM ne peut pas être rares. (Changed17/5/2009 merci Alex pour repérer la faute de frappe)
les colonnes calculées peuvent pas être rares (bien que les colonnes fragmentées peuvent prendre part à un calcul dans une autre colonne calculée)
Vous ne pouvez pas appliquer des règles ou des valeurs par défaut.
Colonnes fragmentées ne font pas partie d'un index cluster. Si vous avez besoin de faire usage d'une colonne calculée basée sur la colonne fragmentée et de créer l'index cluster sur qui (qui est en quelque sorte de défaites de l'objet).
De réplication de fusion ne fonctionne pas.
De compression de données ne fonctionne pas.
Accès (lecture et écriture) pour les colonnes fragmentées est plus cher, mais je n'ai pas été en mesure de trouver des chiffres exacts sur ce.
Référence
Vous êtes en train de lire ce mal - il ne prend jamais de 4x de l'espace.
Plus précisément, il est dit 4* (4 octets, voir note de bas de page), pas de 4x (multiplier par 4). Le seul cas où c'est exactement 4x l'espace est un char(4), qui permettrait de réaliser des économies si les valeurs Null existe plus de 64% du temps.
"*La longueur est égale à la moyenne des données contenues dans le type, plus 2 ou 4 octets."
Vous perdez 4 octets et pas seulement une fois par ligne; mais, pour chaque cellule de la ligne qui n'est pas null.
De SQL SERVER 2008 – Introduction à Colonnes FRAGMENTÉES – Partie 2 par Pinal Dave: