Ich bin mir nicht ganz sicher, ob ich verstehe, was Sie versuchen, aus diesem Test zu erreichen oder erfahren, aber hier sind ein paar zufällige throughts, die mir in den Sinn kam, als ich Ihre Frage gelesen ...
1) In einem realen Anwendungsfall werden Sie wahrscheinlich nicht zwei ganze Tabellen miteinander verbinden, aber es wird Filter für andere Spalten usw. geben, die die Datensätze reduzieren, die in einer oder beiden Tabellen zusammengefügt werden sollen. Dies beeinflusst, welcher Join-Algorithmus am besten geeignet/am effektivsten ist.
Die obigen Pläne sind die Ergebnisse der Verbindung von zwei Tabellen zusammen, aber wenn Sie eine oder beide der Tabellen in einer anderen Spalte filtern sollten, dann könnte der Optimierer einen völlig anderen Join-Typ wählen.
2) Welcher Join-Typ am besten ist, wenn Sie GUID-Spalten verbinden, hängt stark davon ab, wie die GUIDs generiert werden. Wenn Sie eine große Anzahl von Guids verbinden, die völlig zufällig sind (z. B. generiert mit SQL Server's NewID() oder CLR Guid.NewGuid()), dann ist ein Hash-Join wahrscheinlich die beste Wahl. Wenn Sie jedoch eine kleinere Gruppe von sequenziellen (newsequentialid()/UuidCreateSequential()) oder sogar identische Guids verbinden, dann ist ein Loop-Join oft die effizienteste Wahl.
Der Optimierer verwendet Indexstatistiken, um zu ermitteln, welche Art von Join verwendet werden soll. Bei komplexen Abfragen mit vielen GUID-Joins kann es jedoch erforderlich sein, den Join-Typ mit Optimizer-Hinweisen zu erzwingen.
Kurz gesagt, wenn, was Sie versuchen, ob zu tun ist, entscheiden Sie GUID oder INT PKs dann eine reale Test ist eine bessere Wahl verwenden sollten. Erstellen Sie Tabellen, die zu Ihrem Anwendungsfall passen, füllen Sie sie mit einer großen Menge einigermaßen realistischer Beispieldaten aus, und führen Sie einige der Arten von Abfragen durch, die Sie sich auf der ganzen Linie vorstellen. Wenn Sie den gesamten Inhalt von zwei Dummy-Tabellen zusammenfügen, sagt das nicht wirklich etwas über die I/O-Auswirkungen aus Guid-Schlüsseln aus oder wie der Ausführungsplan für andere Abfragen aussehen wird, die int vs guid-Schlüssel enthalten.
Wenn Guid Schlüssel verwenden, sollten Sie die verschiedenen Optionen für sie zu erzeugen und daran denken, dass sequentielle guids mit oft ein guter Weg ist, liest übermäßige Seite zu vermeiden, wenn Sie viele Datensätze sind Verbindungs ...
Hier ist meine Frage, was ist besser Int PK oder Guid PK http://StackOverflow.com/Questions/4593856/ef-4-0-guid-or-int-as-a-primary-key – Kuncevic
I Frage mich, warum es keinen Merge-Join für den Guid verwendet hat. Vermutlich muss es 2 sortierte Eingaben von den Indizes gehabt haben? –