Tengo curiosidad sobre cómo exactamente LINQ (no LINQ to SQL) se está produciendo se une detrás de las escenas en relación con la forma en que Sql Server realiza combinaciones.Uniones LINQ - Rendimiento
Sql Servidor antes de ejecutar una consulta, genera un plan de ejecución. El plan de ejecución es básicamente un árbol de expresiones en lo que cree que es la mejor manera de ejecutar la consulta. Cada nodo proporciona información sobre si hacer un Ordenar, Escanear, Seleccionar, Unir, etc.
En un nodo 'Unir' en nuestro plan de ejecución, podemos ver tres posibles algoritmos; Hash Join, Merge Join y Nested Loops Join. Sql Server elegirá qué algoritmo para cada operación de unión se basa en el número esperado de filas en tablas internas y externas, qué tipo de unión estamos haciendo (algunos algoritmos no admiten todos los tipos de uniones), si necesitamos datos ordenados, y probablemente muchos otros factores.
Ingreso Algoritmos:
Nested Loop Ingreso: Mejor para entradas pequeñas, se puede optimizar con tabla interna ordenada.
Merge Unir: Ideal para entradas medianas o grandes, entradas clasificadas, o una salida que se debe pedir.
Hash Únase a: Ideal para entradas medianas a grandes, se puede paralelizar para escalar linealmente.
LINQ consulta:
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};
de consultas SQL:
SELECT *
FROM firstTable fT
INNER JOIN secondTable sT ON fT.Property = sT.Property
SQL Server podría utilizar un bucle anidado Ingreso si sabe que hay un pequeño número de filas de cada tabla, una combinación de mezcla si sabe que una de las tablas tiene un índice y Hash se une si sabe que hay muchas filas en ninguna de las tablas y ninguno tiene un índice.
¿Linq elige su algoritmo para las uniones? o siempre usa uno?
+1 - la ejecución de los planes de reglas, y con sólo saber acerca de ellos le pone fácilmente en la parte superior del 5% de los programadores de bases de datos. –
Aprecio el cumplido, pero en verdad sobreestiman mi conocimiento. – Meiscooldude