Ich bin gespannt, wie genau LINQ (nicht LINQ to SQL) führt hinter den Kulissen in Bezug auf wie Sql Server Joins durchführt.LINQ Joins - Leistung
Sql Server generiert vor Ausführung einer Abfrage einen Ausführungsplan. Der Ausführungsplan ist im Grunde ein Ausdrucksbaum, von dem er glaubt, dass er die Abfrage am besten ausführt. Jeder Knoten bietet Informationen darüber, ob eine Sortierung, ein Scan, eine Auswahl, eine Join, ect durchgeführt werden soll.
Auf einem 'Join'-Knoten in unserem Ausführungsplan können wir drei mögliche Algorithmen sehen; Hash Join, Merge Join und Nested Loops Join. Sql Server wird entscheiden, welcher Algorithmus für jede Join-Operation basierend auf der erwarteten Anzahl von Zeilen in inneren und äußeren Tabellen, welche Art von Join wir tun (einige Algorithmen unterstützen nicht alle Arten von Joins), ob wir geordnete Daten benötigen und wahrscheinlich viele andere Faktoren.
Join-Algorithmen:
Nested Loop Join: Am besten für kleine Eingänge, ist mit dem inneren Tisch optimiert werden.
Zusammenführen Beitreten: Am besten für mittlere bis große Eingänge sortierte Eingänge oder einen Ausgang, der bestellt werden muss.
Hash-Verknüpfung: Am besten für mittlere bis große Eingänge, kann linear skaliert werden.
LINQ Abfrage:
DataTable firstTable, secondTable;
...
var rows = from firstRow in firstTable.AsEnumerable()
join secondRow in secondTable.AsEnumerable()
on firstRow.Field<object> (randomObject.Property)
equals secondRow.Field<object> (randomObject.Property)
select new {firstRow, secondRow};
SQL Query:
SELECT *
FROM firstTable fT
INNER JOIN secondTable sT ON fT.Property = sT.Property
SQL Server möglicherweise eine verschachtelte Schleife verwenden Sie Mitglied, wenn es weiß, eine kleine Anzahl von Zeilen aus jeder Tabelle gibt es eine Mergeverknüpfung wenn Es weiß, dass eine der Tabellen einen Index hat, und Hash tritt ein, wenn es weiß, dass auf jeder Tabelle viele Zeilen stehen und keiner einen Index hat.
Wählt Linq seinen Algorithmus für Joins? oder benutzt es immer eins?
+1 - bringt Sie bequem in den Top 5% der Datenbank-Programmierer Ausführungspläne Regel, und nur durch über sie zu wissen. –
Ich schätze das Kompliment, aber Sie überschätzen mein Wissen ernsthaft. – Meiscooldude