Ich verwende die integrierte sp_spaceused
gespeicherte Prozedur vor und nach dem Ausführen einer Operation in unserer Software, um zu sehen, welche Tabellen Zeileneinfügungen enthalten und wie sich die Größe jeder Tabelle ändert.
Was ich sehe, ist, dass von allen Tabellen, in die Zeilen geschrieben werden, nur eine Handvoll zeigt, dass die Tabelle seitlich vergrößert wurde. Die anderen, die Zeilen anzeigen, die hinzugefügt wurden, zeigen keine Änderung der Größe dieser gespeicherten Prozedur.
Der einzige Fall, in dem dies nicht zutrifft, ist bei der ersten Transaktion, nachdem alle Tabellen abgeschnitten wurden. Mir scheint also, dass SQL Server beim Speichern doppelter Daten anzeigt, dass Zeilen eingefügt wurden, sondern nur Zeiger auf vorherige identische Zeilen speichern müssen.
Kann jemand dies bitte bestätigen?
quelle
Antworten:
Nein, SQL Server erkennt keine doppelten Zeilen
SQL Server füllt leere oder teilweise leere Seiten innerhalb der zugewiesenen Seiten.
Wenn ich also eine sehr schmale Zeile habe (sagen wir 2 Spalten), kann ich ein paar hundert weitere Zeilen auf derselben Seite hinzufügen, ohne den verwendeten Speicherplatz zu erhöhen.
Schnelle und schmutzige Demo (ohne doppelte Zeilen, aber Sie können damit spielen, wenn Sie möchten)
quelle
Dies hängt von der Version und den Datenkomprimierungsoptionen von SQL Server ab:
Für die Präfix- und Wörterbuchkomprimierung (Seitenkomprimierung) verwendet SQL Server Zeiger, um (teilweise oder vollständig) doppelte Werte (keine doppelten Zeilen) in derselben Spalte oder in diff zu speichern . Säulen.
Ergebnisse:
quelle