J'utilise la sp_spaceused
procédure stockée intégrée avant et après avoir effectué une opération dans notre logiciel pour voir quelles tables ont des insertions de lignes et comment la taille de chaque table change.
Ce que je vois, c'est que de toutes les tables sur lesquelles des lignes sont écrites, seule une poignée montre que la table a augmenté de côté. Les autres qui affichent des lignes ont été ajoutées ne montrent aucun changement de taille de cette procédure stockée.
Le seul cas où cela n'est pas vrai concerne la première transaction après avoir effectué un tronçon sur toutes les tables. Donc, pour moi, il semble qu'au lieu de stocker des données en double, SQL Server montre que les lignes sont insérées mais doivent simplement stocker des pointeurs vers les lignes identiques précédentes.
Quelqu'un peut-il confirmer cela s'il vous plaît?
la source
Réponses:
Non, SQL Server ne détecte pas les lignes en double
SQL Server remplit des pages vides ou partiellement vides dans les pages allouées.
Donc, si j'ai une ligne très étroite (disons 2 colonnes), je peux ajouter quelques centaines de lignes supplémentaires sur la même page sans augmenter l'espace utilisé.
Démo rapide et sale (sans lignes en double, mais vous pouvez jouer avec cela si vous le souhaitez)
la source
Cela dépend de la version de SQL Server et des options de compression des données:
Ainsi, pour la compression de préfixe et de dictionnaire (compression de page), SQL Server utilise des pointeurs pour stocker (partiellement ou entièrement) les valeurs dupliquées (pas les lignes dupliquées) dans la même colonne ou dans diff. Colonnes.
Résultats:
la source