2010-11-07 10 views
26

Ich weiß, dass einige Softwarehäuser mit dem Int-Typ für den Primärschlüssel einer persistenten Klasse gebrannt wurden. Davon abgesehen wachsen nicht alle Tabellen über 2 Milliarden. In der Tat, die meisten nicht.Primärschlüssel Typ: Int vs lang

Verwenden Sie also den langen Typ nur für die Klassen, die möglicherweise großen Tabellen zugeordnet sind ODER für jede persistente Klasse, nur um konsistent zu sein? Was ist der Branchenkonsens?

Ich lasse diese Frage für eine Weile offen, damit Sie Ihre Erfolgs-/Horrorgeschichten mit uns teilen können.

Antwort

19

Lange kann vorteilhaft sein, auch wenn die Tabelle nicht sehr groß wird, aber einen hohen Umsatz hat, dh wenn Zeilen häufig gelöscht/eingefügt werden. Ihr automatisch generierter/sequenzieller eindeutiger Bezeichner kann auf eine hohe Zahl erhöht werden, während die Tabelle klein bleibt.

Ich benutze in der Regel Long, weil die Performance-Vorteile in den meisten meiner Projekte nicht bemerkbar sind, aber ein Bug aufgrund von Überlauf wäre sehr auffällig!

Das ist nicht zu sagen, dass Int ist nicht eine bessere Option für andere Leute Szenarien, zum Beispiel für Datenverarbeitung oder komplexe Abfrage-Systeme. Machen Sie sich nur die Risiken/Vorteile bewusst und wie sie sich auf Ihr spezifisches Projekt auswirken.

1

Ich benutze Integer für meine Ersatzschlüssel, es sei denn ich brauche sie etwas anderes. Es ist nicht notwendig, immer ein Long zu verwenden, wenn Sie es nicht brauchen.

(I verwenden in der Regel JPA/Hibernate in meinen Projekten gegen laufen entweder Oracle 10g oder MySQL 5.x Datenbanken.)

1

Da Int immer schneller für Select/Sortierungen sein wird.

+9

Sogar in x64? Ich dachte anders. –

2

Ich weiß nicht über "verbrannt". Es ist nicht schwer, von int zu long zu wechseln, wenn es nötig ist. Die Konvertierung ist in SQL einfach und dann ist es nur ein Suchen und Ersetzen in Ihrem Client-Code (oder die Änderung in Ihrer Persistenz-Schicht, und dann kompilieren und sehen, was bricht.) Sie bewegen sich von einem Integer-Typ zu einem anderen, So müssen Sie sich nicht um subtile Umwandlungsprobleme oder Trunkierung sorgen.

Von Float zu Double gehen würde viel schwieriger sein.

+7

Der Tag, an dem jemand float oder double für einen Primärschlüssel verwendet, ist der Tag, an dem ich als Softwareingenieur aufgehört habe. Aber ich jetzt was du meinst. Für Floating-Point-Felder ist die Entscheidung im Vordergrund viel wichtiger als bei Integer-Feldern. –