Frage

Mögliche Duplikate:
Wie mögen Sie Ihren Primärschlüssel?

Ich bin mir bewusst, dass die Vorteile der Verwendung einer GUID als auch die Vorteile der Verwendung und INT als PK in einer Datenbank.Wenn man bedenkt, dass eine GUID ist im wesentlichen ein 128-bit-INT und einem normalen INT 32 bit INT ist ein Raumwunder, (obwohl dieser Punkt ist in der Regel moot in den meisten modernen Systemen).

Am Ende, in welchen Umständen würden Sie sehen, selbst mit einem INT als PK gegen eine GUID?

War es hilfreich?

Lösung

Kimberley Tripp (SQLSkills.com) hat ein Artikel auf GUID als Primärschlüssel verwendet wird. Sie rät dagegen wegen des unnötigen Aufwand.

Andere Tipps

Neben eine schlechte Wahl sein, wenn Sie mehrere Datenbankinstanzen synchronisieren müssen, INT die haben einen Nachteil habe ich nicht erwähnt gesehen: Einsätze immer an einem Ende des Indexbaums auftreten. Dies erhöht die Sperr-Konflikt, wenn Sie eine Tabelle mit viel Bewegung haben (da die gleichen Indexseiten haben durch die gleichzeitige Einsätze geändert werden, während GUID werden alle über den Index eingefügt werden). Der Index kann auch öfter neu gewichtet werden, wenn ein B * -Baum oder ähnliche Datenstruktur verwendet wird.

Natürlich sind int einfacher auf das Auge, wenn manuelle Abfragen und Bericht Konstruktion zu tun, und Platzverbrauch durch Nutzungen FK aufaddieren können.

würde mich interessieren keine Messungen, wie gut zu sehen, zum Beispiel SQL Server behandelt tatsächlich Einsatzschwer Tabellen mit IDENTITY PK.

Um Ihre Frage zu beantworten: Am Ende, in welchen Umständen würden Sie sich selbst sehen ein INT als PK im Vergleich zu einer GUID?

Ich würde eine GUID verwenden, wenn mein System eine Online / Offline-Version haben würde, dass in der Offline-Version Sie Daten speichern können und dass Daten übertragen werden an den Server zurück einem Tag eines Synch. Auf diese Weise sind Sie sicher, dass Sie nicht den gleichen Schlüssel zweimal in Ihrer Datenbank haben.

  

das INT ist eine platzsparende (obwohl dies   Punkt wird in der Regel in den meisten modernen moot   Systeme).

Nicht so. Es kann so auf dem ersten Blick erscheint, aber beachten Sie, dass der Primärschlüssel jeder Tabelle wird in der gesamten Datenbank in Indizes und als Fremdschlüssel in anderen Tabellen mehrmals wiederholt werden. Und es wird in fast jede Abfrage enthält seine Tabelle beteiligt werden. - und sehr intensiv, wenn es ein Fremdschlüssel verwendet für einen Join

Darüber hinaus, denken Sie daran, dass moderne CPUs sind sehr, sehr schnell, aber RAM-Geschwindigkeiten haben nicht Schritt gehalten. Cache-Verhalten wird daher immer wichtiger. Und der beste Weg, um gutes Cache-Verhalten zu erhalten, ist kleiner Datensätze zu haben. So ist der scheinbar irrelevante Unterschied zwischen 4 und 16 Bytes kann auch in einem spürbaren Unterschied in der Geschwindigkeit zur Folge hat. Nicht unbedingt immer -. Aber es ist etwas zu prüfen

Wir haben Guids in unserer sehr komplexen Enterprise-Software überall. Reibungslos funktioniert.

Ich glaube, Guids semantisch besser geeignet sind als Bezeichner zu dienen. Es gibt auch keinen Sinn unnötig Sorgen über die Leistung, bis Sie mit diesem Problem konfrontiert sind. Hüten Sie sich vor vorzeitige Optimierung.

Es ist auch ein Vorteil, mit der Datenbankmigration jeglicher Art. Mit Guids werden Sie keine Kollisionen haben. Wenn Sie mehrere DBs zu verschmelzen versuchen, wo Ints für Identität verwendet werden, werden Sie ihre Werte ersetzen. Wenn diese alten Werte in Urls verwendet wurden, werden sie jetzt anders folgende SEO Hit.

Wenn Werte wie Primär zu Fremdschlüsselbeziehung zu vergleichen, wird das INT schneller sein. Wenn die Tabellen korrekt indiziert sind und die Tische sind klein, können Sie nicht viel von einer Verlangsamung sehen, aber man müßte es versuchen, sicher zu sein. INTs ist auch leichter zu lesen, und die Kommunikation mit anderen Menschen. Es ist viel einfacher zu sagen: „Können Sie sich auf Rekord 1234 aus?“ anstelle von "Kann man sich auf Rekord 031E9502-E283-4F87-9049-CE0E5C76B658?"

Einige Betriebssysteme nicht erzeugen von GUIDs mehr basiert auf einzigartigen hardware-Funktionen (CPUID -, MAC), da es aus tracing-Benutzer zu leicht (aus Datenschutzgründen).Dies bedeutet, dass die GUID Einzigartigkeit ist oft nicht mehr so universell ist, wie viele Leute denken.

Wenn Sie eine auto-id-Funktion der Datenbank, die Datenbank könnte in der Theorie stellen Sie absolut sicher, dass es keine überschneidungen.

Wenn die Daten in einer einzigen Datenbank lebt (wie die meisten Daten für die Anwendungen, die wir im Allgemeinen schreiben der Fall ist), dann habe ich eine IDENTITY verwenden. Es ist einfach, sollte auf diese Weise verwendet wird, nicht den Clustered-Index nicht fragmentieren und ist mehr als genug. Sie werden 2000000000 einige Datensätze (~ 4 Milliarden, wenn Sie negative Werte verwenden) aus dem Zimmer laufen, aber Sie würden sowieso Toast, wenn Sie in einer Tabelle, dass viele Aufzeichnungen haben, und dann haben Sie ein Data-Warehousing-Problem.

Wenn die Daten leben in mehr, voneinander unabhängigen Datenbanken oder Schnittstellen mit einem Drittanbieter-Dienst, dann werde ich die GUID verwenden, die wahrscheinlich bereits generiert wurde. Ein gutes Beispiel wäre ein Userprofiles Tabelle in der Datenbank, die Benutzer in Active Directory, um ihre Benutzerprofile in der Anwendung über ihre objectGUID zuordnet, die Active Directory, die ihnen zugewiesen.

Wenn Sie auf Zusammenführen von Datenbank zu einem bestimmten Zeitpunkt planen, das heißt für einen Multi-Site-Replikation Typen Setup wird Guid ist eine Menge Schmerz ersparen. Aber anders als das finde ich Int einfacher.

Ich denke immer, PK numerisch sein sollte, wo possble. Vergessen Sie nicht, GUIDs als PK mit wahrscheinlich bedeuten, dass sie auch in anderen Tabellen als foriegn Schlüssel verwendet werden, so Paging und Index usw. größer sein wird.

Ich denke, die Datenbank auch ankommt. Aus einer MySQL-Perspektive -. Im Allgemeinen, desto kleiner ist der Datentyp desto schneller ist die Leistung

Es scheint für int vs GUID zu wahr zu halten - http://kccoder.com/mysql/uuid-vs-int-insert -Performance /

würde ich GUID als PK nur verwenden, wenn dieser Schlüssel Grenzen ähnlichen Wert. Zum Beispiel, Benutzer-ID (Benutzer in WinNT ist beschrieben mit GUIDs) oder Benutzergruppen-ID. Ein anderes Beispiel. Wenn Sie verteiltes System für Dokumentenverwaltung zu entwickeln und verschiedene Teile des Systems an verschiedenen Orten auf der ganzen Welt einige Dokumente erstellen kann. In einem solchen Fall würde ich GUID verwenden, weil es garantiert, dass 2 in verschiedenen Teilen des verteilten Systems erstellten Dokumente nicht gleiche ID haben.

Ein INT ist sicherlich viel einfacher zu lesen, wenn das Debuggen und viel kleiner ist.

Ich würde verwenden jedoch ein GUID oder ähnliches als Lizenzschlüssel für ein Produkt. Sie wissen, es wird eindeutig sein, und Sie wissen, dass es geht nicht sequentiell sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top