es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo intercambiar los lados de una unión izquierda en SQL?

Tengo dos tablas que me gustaría consultar, la tablaA tiene aproximadamente 53,000 filas mientras que la tablaB tiene aproximadamente 530 millones de filas.

SELECT
    b.some_field AS campo,
    a.*
FROM tableA a -- 53_462
LEFT JOIN tableB b -- 527_795_032
ON a.user_id = b.user_id
AND a.numeric_field >= b.numeric_field
AND a.numeric_field <= b.other_numeric_field
;

Esto hace que el motor de consulta se colapse porque el lado derecho es mucho más grande que el izquierdo, por lo que creo que por cada fila en el lado izquierdo tiene que consultar el lado derecho.

En caso de que el tamaño del lado derecho sea mucho mayor que el izquierdo, ¿cuál es la mejor opción a seguir? Estoy pensando en dos posibilidades:

  • Cambiar los lados y utilizar el “right join”.
  • Crear una tabla potencialmente mucho más pequeña consultando las filas que existen en el lado derecho y uniendo esa tabla.
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en SQL y AWS, al tratar con una consulta de “left join” donde la tabla del lado derecho es mucho más grande que la del lado izquierdo, es mejor considerar las siguientes dos posibilidades:

    1. Cambiar los lados y utilizar un “right join” en su lugar. Esto podría ser más eficiente, ya que iteraría a través de la tabla más pequeña del lado izquierdo y solo emparejaría las filas asociadas de la tabla mucho más grande del lado derecho.
    2. Crear una tabla más pequeña filtrando las filas que solo existen en la tabla del lado derecho y luego unirla con esa tabla. Este enfoque podría mejorar el rendimiento de la consulta al reducir el número de filas en la tabla del lado derecho.

    Además, si el rendimiento sigue siendo lento, particionar la tabla del lado derecho utilizando Amazon Athena y Presto también podría ayudar a acelerar la consulta al reducir la cantidad de datos escaneados para cada consulta.

Comments are closed.