Hallo zusammen!
Bin neu hier und auf der Suche nach ein paar Antworten auf eine Frage hier über dieses Forum gestolpert.
Mich würde interessieren, wie es sich mit dem Speicherbedarf von numeric / bzw. decimal Werten verhält.
Ich weis, das lt. MS Doku für den SQL Server 2005 ein decimal oder numeric Wert bei einer Genauigkeit bis 9 rund 5 Byte Speicherplatz benötigt.
Im Detail:
decimal (P,S)
P == Genauigkeit
S == davon dezimalstellen.
Genauigkeit (P) | Speicherbedarf
1-9 | 5byte
10-19 | 9byte
20-28 | 13byte
29-38 | 17byte
In unserer Datenbank haben wir eine Tabelle mit mehreren Millionen Einträgen.
Da wir damals beim entwerfen nicht gleich auf Speicherplatzoptimierung geachtet haben, wollte ich (und habe schon zum Teil erfolgreich) hier den Speicherbedarf pro Zeile optimieren.
(Aus Datetime -> smalldateime, int -> smallint, usw)
Dies hatte mir einen erhebliche reduzierung des Speicherbedarfs der tabelle sowie der darauf liegenden Indizes gebracht.
Nun wollte ich das gleiche auch für die Dezimalspalten tun. (es macht ja keinen Sinn eine Spalte, die maximal 4 Stellen haben kann mit 16 zu speichern).
Nun ist es aber so, das diese Änderung der decimal Spalten keine Auswirkung auf die Größe der Daten in der Tabelle hat. Die Daten brauchen genau soviel Platz wie vorher.
Ich habe folgendes Script dazu verwendet:
ALTER TABLE xxx ALTER COLUMN zzz decimal(8,2) null
(Also nicht über den Designer, sondern direkt per script).
Kann es sein, das die tabelle komplett neu erstellt werden müsste, um hier tatsächlich auch einen Speicherplatzgewinn zu erzielen? (Der esignr würde das ja so machen)
(Ich kann das leider nicht ganz so einfach ausprobieren, da die Datenbank in einer Replikation verwendet wird).
MFG
Josef Hietl
Bin neu hier und auf der Suche nach ein paar Antworten auf eine Frage hier über dieses Forum gestolpert.
Mich würde interessieren, wie es sich mit dem Speicherbedarf von numeric / bzw. decimal Werten verhält.
Ich weis, das lt. MS Doku für den SQL Server 2005 ein decimal oder numeric Wert bei einer Genauigkeit bis 9 rund 5 Byte Speicherplatz benötigt.
Im Detail:
decimal (P,S)
P == Genauigkeit
S == davon dezimalstellen.
Genauigkeit (P) | Speicherbedarf
1-9 | 5byte
10-19 | 9byte
20-28 | 13byte
29-38 | 17byte
In unserer Datenbank haben wir eine Tabelle mit mehreren Millionen Einträgen.
Da wir damals beim entwerfen nicht gleich auf Speicherplatzoptimierung geachtet haben, wollte ich (und habe schon zum Teil erfolgreich) hier den Speicherbedarf pro Zeile optimieren.
(Aus Datetime -> smalldateime, int -> smallint, usw)
Dies hatte mir einen erhebliche reduzierung des Speicherbedarfs der tabelle sowie der darauf liegenden Indizes gebracht.
Nun wollte ich das gleiche auch für die Dezimalspalten tun. (es macht ja keinen Sinn eine Spalte, die maximal 4 Stellen haben kann mit 16 zu speichern).
Nun ist es aber so, das diese Änderung der decimal Spalten keine Auswirkung auf die Größe der Daten in der Tabelle hat. Die Daten brauchen genau soviel Platz wie vorher.
Ich habe folgendes Script dazu verwendet:
ALTER TABLE xxx ALTER COLUMN zzz decimal(8,2) null
(Also nicht über den Designer, sondern direkt per script).
Kann es sein, das die tabelle komplett neu erstellt werden müsste, um hier tatsächlich auch einen Speicherplatzgewinn zu erzielen? (Der esignr würde das ja so machen)
(Ich kann das leider nicht ganz so einfach ausprobieren, da die Datenbank in einer Replikation verwendet wird).
MFG
Josef Hietl
Comment