learn khan how course books beginner academy sql join

khan - Diferencias en la combinación de SQL



sequel database (5)

¿Cuál es la diferencia entre la combinación interna y la combinación externa (combinación izquierda, combinación derecha) y cuál tiene el mejor rendimiento de ellos?

¡Gracias!


Espero que entiendas las imágenes. En cuanto a rendimiento, son equivalentes, no hay diferencia.

EDITAR: Oops. Supongo que no te importó esa parte de la respuesta.


Izquierda, derecha, interior y exterior no afectan el rendimiento, y ya se han explicado bien aquí.

Sin embargo, hay sugerencias que puede agregar a las combinaciones que sí afectan el rendimiento: hash, loop y merge.

Normalmente, el planificador de consultas decide cuál de estos debe hacer, pero de vez en cuando puede mejorar el rendimiento anulándolo.

Una join loop pasa por cada fila en la segunda tabla para cada fila en la primera. Esto es bueno si tienes una mesa muy grande y una mucho más pequeña.

Una join merge pasa por ambas tablas juntas en orden. Puede ser muy rápido si ambas tablas ya están ordenadas por el campo al que se está uniendo.

Una join hash utiliza muchas tablas temporales para agrupar la salida a medida que ordena a través de los datos unidos.

Algunos DB especializados también admiten otros tipos, como las uniones de mapa de bits.


Las comparaciones de rendimiento entre los tipos de combinaciones son irrelevantes, ya que brindan conjuntos de resultados diferentes. Incluso si una unión interna es más rápida, no la usaría si necesitara los resultados de una combinación izquierda (que incluye incluso los registros que no coinciden con la segunda tabla en la combinación).



A LEFT JOIN B es lo mismo que B RIGHT JOIN A Algunos RDBMS no tienen RIGHT JOIN , por lo que debe volver a escribir su lógica RIGHT JOIN para la lógica LEFT JOIN

A 1 2 3 B 2 3 4 3 SELECT A.I FROM INNER JOIN B ON B.I = A.I; output: 2 3, 3 SELECT A.I AS X, B.I AS Y FROM A LEFT JOIN B ON B.I = A.I; read above code as A on LEFT, JOINs B output: X Y 1 NULL 2 2 3 3 3 3 SELECT A.I AS X, B.I AS Y FROM B RIGHT JOIN A ON A.I = B.I;

Lea el código anterior como B on RIGHT, JOINs A Que es lo mismo que A está a la IZQUIERDA

Lo que está a la izquierda, siempre se evalúa, siempre tiene una salida. Puedes imaginar A IZQUIERDA UNIRSE B, B DERECHA UNIRSE A como:

var result = new Dictionary<int, int?>(); var A = new int[] { 1, 2, 3 }; var B = new int[] { 2, 3, 4, 3 }; foreach (int aElem in A) { bool hasMatch = false; foreach (int bElem in B) { if (bElem == aElem) { result.Add(aElem, bElem); hasMatch = true; } } if (!hasMatch) result.Add(aElem, null); } foreach(int X in result.Keys) { MessageBox.Show(string.Format("X {0} Y {1}", X, result[X].HasValue ? result[X].Value.ToString() : "NULL" )); }