Forum: PC-Programmierung SQL Datentypen und Speichergrössen;


von interrupt; (Gast)


Lesenswert?

Hallo,
ich habe eine Microsoft SQL Server 2000 - Datenbank übernommen und 
wundere mich jetzt etwas über manche verwendete Datentypen.

Handelt es sich beim Typ "numeric 5(5,0)" um einen Gleitkommawert mit 5 
Stellen ?
Im Schema "numeric A(B,C)" handelt es sich dann bei "A" vermutlich um 
die gesamte Stellenzahl, sind "B" Vorkomma- und "C" die Nachkommastellen 
?
Was bedeutet dann aber "numeric 5(8,0)" (kommt in der DB auch vor) ?

Ist es tatsächlich sinnvoll, für einen immer ganzzahligen Index den Typ 
"numeric" zu werwenden, ich hätte einen Integer-Typ für besser gehalten 
?

Wie kann der Speicherbedarf (im Arbeitsspeicher bzw. auf der Festplatte) 
für den Typ "numeric A(B,C)" in Abhängigkeit von der A, B und C 
berechnet werden ?

Wie unterscheiden sich grössenordnungsmässig die Suchzeiten für den 
Befehl
"select * from tab_XYZ where index=100", wenn "index" vom Typ "numeric" 
bzw. vom Typ "int" ist ?

THX, interrupt

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

interrupt; schrieb:
> Was bedeutet dann aber "numeric 5(8,0)" (kommt in der DB auch vor) ?
Ein Wert mit fester Stellenzahl und keinem Offset:
http://msdn.microsoft.com/de-de/library/ms187746.aspx

Für den Rest siehe ebenso die Doku... oder einfach mal ein EXPLAIN 
ausführen.

von Jens G. (jensig)


Lesenswert?

Bist Du sicher, daß die Form "numeric A(B,C)" etwas ist, was der 
SQL-Server verdaut? Oder ist das nur sowas wie eine Beschreibungssprache 
auf höherer Applikationsebene? Ich (uznd der von Läubi gezeigte Link) 
kenne jedenfalls von anderen DB's nur die Form "numeric(B,C)".

>Wie unterscheiden sich grössenordnungsmässig die Suchzeiten für den
>Befehl
>"select * from tab_XYZ where index=100", wenn "index" vom Typ "numeric"
>bzw. vom Typ "int" ist ?

Eigentlich gar nicht, wenn der Index relativ "unique" ist. Wenn dagegen 
ziemlich viele Rows dabei gefunden werden, dann kommt es drauf an, ob 
der numeric-Typ vom Speicherbedarf her (abhängig von dessen Precision) 
länger oder kürzer als 4Byte (=Integer-Länge) ausfällt. Wenn länger, 
dann mehr Speicherbedarf in der Tabelle, damit Tabelle bzw. Index 
größer, mehr Pages, die gelesen werden müssen. Ist aber eher eine 
theoretische Betrachtung, denn ich denke, die Unterschiede werden 
trotzdem eher marginal sein.

von Jens G. (jensig)


Lesenswert?

Ach ja: numeric/decimal statt (big)int trotz Ganzzahlen macht eigentlich 
nur dann Sinn, wenn man einen deutlich größeren Wertebereich braucht, 
als (big)int darstellen kann (um die 20 Stellen), oder wenn man 
Speicherplatz sparen will bei nur kleinen Zahlen (letzteres macht aber 
auch keinen Sinn, da es ja small/tinyint gibt)

von interrupt (Gast)


Lesenswert?

Jens G. schrieb:
> Bist Du sicher, daß die Form "numeric A(B,C)" etwas ist, was der
> SQL-Server verdaut?

Jetzt sehe ich das klarer :

- Der Enterprise Manager (Verwaltungstool) des MSSQL2000 zeigt unter 
Eigenschaften der Tabelle für eine SpalteXY z.B. "numeric 5(5,0)" an.

Im generierten SQL-Skript zur Erzeugung der Tabelle steht für den 
Datentyp dagegen der Befehl
"[SpalteXY] [numeric](5, 0) NOT NULL "


THX !

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.