Obergrenzen für Werte

Hallo,

für jede Spalte einer Tabelle muss man ja einen möglichen Wertebereich definieren.

Hatte jetzt grad das Problem, das eine Spalte als medium int definiert wurde und hier jetzt das Limit erreicht war.

Bin grad am überlegen ob ich nicht grundsätzlich alles als int definiere, damits da in Zukunft keine Probleme mehr gibt.

Welche Nachteile hat es wenn ich mehr Platz reserviere als ich benötige.

Ok, es wird mehr Speicherplatz brauchen, aber fällt der wirklich ins Gewicht?

Thx, Christian

Holla.

Welche Nachteile hat es wenn ich mehr Platz reserviere als ich
benötige.

Du verbrauchst mehr Platz, als Du benötigst.

Ok, es wird mehr Speicherplatz brauchen, aber fällt der
wirklich ins Gewicht?

1000000 Datensätze mit jeweils drei numerischen Feldern à 1 Byte = 3 MB; bei jeweils 2 Byte sind es 6 MB … ob das ins Gewicht fällt, musst Du schon selbst beurteilen. Im Zeitalter der Giga-Speichermedien ist das eher nicht der Fall.

Ich würde eher den zusätzlichen Rechenzeitaufwand in Betracht ziehen - je nachdem, wie oft auf das numerische Feld zugegriffen wird, kannst Du mit dem aufgeblasenen Format ein System gnadenlos ausbremsen.

Gruß Eillicht zu Vensre

nochmal hi,

hab vergessen zu erwähnen, das es dabei nur um id’s von datensätzen geht

also entweder es ist ne kleine tabelle, d.h. wenige datensätze und kleine werte für die id’s

wenn ich hier mehr platz reserviere ists eigentlich egal, weil ja eh nur wenig datensätze in der tab sind

und bei einer sehr grossen tab mit vielen datensätzen wird dann sowieso eine hohe id benötigt

Mahlzeit,

Hatte jetzt grad das Problem, das eine Spalte als medium int
definiert wurde und hier jetzt das Limit erreicht war.
Bin grad am überlegen ob ich nicht grundsätzlich alles als int
definiere, damits da in Zukunft keine Probleme mehr gibt.

ich nehme an, daß Du von mySQL sprichst. Dort gibt es die Datentypen medium int, der auf 3 Byte basiert, und int, der 4 Byte groß ist. Mit ersterem hast Du einen Wertebereich, der 2^24 oder 16.777.216 verschiedene Werte umfaßt; mit letzterem sind 2^32 oder 4.294.967.296 verschiedene Werte darstellbar.
Die erste Zahl kann schon in normalen, alltäglichen Situationen erreicht werden (nein, nicht mein Kontostand), so daß Du diese Grenze relativ schnell sprengen könntest. Mit der zweiten hast Du da ein bißchen mehr Sicherheit.

Nimmst Du medium int, wirst Du für diese Spalte etwas weniger als ein Byte pro Datensatz gegenüber int sparen (ein bißchen Overhead geht bei dieser Art Speicherung verloren). Das ist, wie Freiherrr von und zu Vensre schon darlegte, bei den heutigen Plattenpreisen sicherlich kein großes Problem.

Entscheidend dürfte aber die Zugriffsgeschwindigkeit sein: Du sprichst von IDs, und da ist es wichtig, daß der Zugriff so schnell wie möglich erfolgen kann. Wenn ich unterstellen darf, daß Du mit einem PC arbeitest, so ist deren „Muttersprache“ 32bittig. Da müßte vor jedem Zugriff der Schlüssel noch verarbeitet werden, bevor er ausgewertet werden kann - zeitlich eine Katastrophe.

Lange Rede, kurzer Sinn: nimm int für Schlüsselattribute!

Gruß

Sancho

Hallo Christian,

ich möchte mich Sancho anschließen:
auf 32bit Systemen für schnellen Primary-Key-Zugriff erlaube ich mir stets den int32.
Ich sage mir hierbei immer ganz pauschal: das muss einfach drin sein. Und wenn nicht, wird es Zeit, das System zu erweitern.

Übrigens: insofern die ID’s stets positiv sind und sein sollen, kannst du den Wertebereich verdoppeln, in dem du deine INT-Spalten (egal ob Tiny/Small/Medium/32) als UNSIGNED deklarierst.

Grüße, Hagen