numerisch(38,0) als primary key column; gut, schlecht, wer kümmert sich?
Auf mein Aktuelles Projekt, stieß ich auf unsere " master-DB-Skript. Näherem betrachten, bemerkte ich, dass alle unsere ursprünglichen Primärschlüssel haben den Datentyp numerisch(38,0)
Wir sind derzeit mit SQL Server 2005 als unsere primäre DB-Plattform.
Für ein wenig Kontext, wir unterstützen sowohl die Oracle-und SQL-Server als unsere back-end. In Oracle, unser Primärschlüssel haben den Datentyp number(38,0).
Weiß jemand, der möglichen Nebenwirkungen und Auswirkungen auf die Leistung einer solchen Umsetzung? Ich habe immer befürwortet und umgesetzt int oder bigint als Primärschlüssel und würde gerne wissen, ob numerisch(38,0) ist die bessere alternative.
InformationsquelleAutor user37179 | 2008-11-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, Sie sind verbringen, mehr Daten zu speichern zahlen, die Sie nie wirklich erreichen.
bigint geht bis zu 9,223,372,036,854,775,807 in 8 Bytes
int geht bis 2.147.483.647 4 Byte
Einen NUMERISCH(38,0) dauern wird, wenn mache ich die Mathe-rechts, 17 bytes.
Kein großer Unterschied, aber: kleinere Datentypen = mehr Zeilen in den Speicher (oder weniger Seiten für die gleiche Anzahl von Zeilen) = weniger Platten-I/O-zu-tun-lookups (entweder indiziert oder Daten Seite sucht). Das gleiche gilt für die Replikation, log-Seiten, etc.
Für SQL Server: INT ist ein IEEE-standard, und so ist es einfacher die CPU zu vergleichen, so erhalten Sie einen leichten performance-Steigerung durch die Verwendung von INT vs. NUMERISCHE (das ist ein packed decimal-format). (Hinweis: in Oracle, wenn die aktuelle version entspricht den älteren Versionen, die ich wuchs auf, ALLE Datentypen sind gepackte, so ein INT-innen ist so ziemlich das gleiche als NUMERIC( x,0), so gibt es keine performance-Unterschied)
So, in den großen Plan der Dinge -- wenn Sie haben viel Festplatte, RAM und Ersatz-I/O, mit welchem Datentyp Sie wollen. Wenn Sie möchten, um ein wenig mehr Leistung, ein wenig mehr konservativ.
Sonst an dieser Stelle würde ich alles so lassen wie es ist. Keine Notwendigkeit, Dinge zu verändern.
Rick: Ja, meine bad. Sollte sein: WENIGER Seiten im Speicher für die gleiche Anzahl von Zeilen, oder wie du gesagt hast-mehr ZEILEN. Guten Fang. Ich denke, ich kann es Bearbeiten, ohne zum wiki, ich werde überprüfen
Aus Neugier, warum die Tatsache, dass die INT ist ein IEEE-standard machen es leichter für die CPU zu vergleichen?
Ian Varley: Weil die meisten CPU-Hersteller Folgen den IEEE-standard. Oracle konvertieren müssen, ist es verpackt-format in die IEEE-äquivalente für die Verarbeitung. Beachten Sie, dass die 10G endlich hat das IEEE-floating-point-zahlen
InformationsquelleAutor Matt Rogish
Sperrung der Speicherung überlegungen und einige anfängliche Verwirrung über die zukünftige Datenbankadministratoren, ich sehe keinen Grund, warum NUMERISCH(38,0) wäre eine schlechte Idee. Lassen Sie für bis 9,99 x 10^38 Datensätze in Ihrer Tabelle, die Sie sicherlich nie erreichen. Meine schnellen Graben in dieser wiederum nicht jede eklatante Grund, es nicht zu verwenden. Ich vermute, dass Ihre einzige Problem wird sein, dass der Speicherplatz verbraucht, aber da, wie Speicherplatz ist so Billig, das sollte kein Problem sein.
Ich habe gesehen, dass dies eine ganze Reihe von Zeiten, in Oracle Datenbanken, da es eine ziemlich große Standard-Wert, den Sie brauchen nicht zu denken, wenn Sie eine Tabelle erstellen, ähnlich wie mit INT oder BIGINT standardmäßig in SQL Server.
InformationsquelleAutor Jeremiah Peschka
Wären Sie besser dran mit einem GUID. Wirklich. Der übliche Grund, nicht zu verwenden ist, dass ein integer eine bessere Leistung. Aber GUID kleiner ist als numeric(38), und hat den zusätzlichen Vorteil, dass es ein wenig leichter zu machen, was wie let getrennt Benutzern das erstellen und synchronisieren von neuen Datensätzen.
Wie werden die GUIDs mehr umständlich für den FKs? Sie sollten nicht Blick auf Sie sowieso, und seit GUID kleiner ist als numeric(38) wird die Datenbank-handle verbindet und so schneller.
InformationsquelleAutor Joel Coehoorn
Dieser ist übermäßig groß, weil Sie nie, dass viele Zeilen. Die größere Größe wird in mehr Speicherplatz. Dies ist nicht eine große Sache in sich, sondern bedeutet auch mehr Lesevorgänge von der Festplatte zum abrufen von Daten aus einer Tabelle oder einem index. Es wird bedeuten, weniger Zeilen passen in den Speicher auf dem Datenbank-server.
Ich glaube es ist noch nicht kaputt genug zu sein, störte die Befestigung.
Er vergaß das wichtigste problem: Vergleich der Zeit für joins. Es dauert länger, um einen numerischen(38) als ein int. Wenn Sie beitreten ein paar großen Tischen zusammen, die sich addieren können.
Selbst wenn SO waren immer 10 Millionen hits am Tag, würde es 2,5 Milliarden Jahre vor dem BIGINT übergelaufen.
InformationsquelleAutor WW.