Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

LEFT JOIN corre infinitamente más rápido que INNER JOIN

Estas en el tema de LEFT JOIN corre infinitamente más rápido que INNER JOIN en el foro de SQL Server en Foros del Web. Buenos dias. Quisiera que alguien me explicara el por qué de lo que comento en el título. Tengo esta consulta: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver ...
  #1 (permalink)  
Antiguo 12/05/2011, 10:11
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
LEFT JOIN corre infinitamente más rápido que INNER JOIN

Buenos dias.
Quisiera que alguien me explicara el por qué de lo que comento en el título.
Tengo esta consulta:
Código SQL:
Ver original
  1. SELECT P.Fecha AS Fecha,
  2. P.CodigoTrabajador AS CodigoTrabajador,
  3. T.Nombre AS NombreTrabajador,
  4. 'PARTE TRABAJO' AS TipoIncidencia,
  5. P.HoraInicio AS HoraInicio,
  6. 'Parte sin Asistencia | ' + L.CodigoOrdenProduccion + ' | ' + P.CodigoOperacion + ' - ' + L.NombreOperacion AS Descripcion
  7. FROM PartesTrabajo P
  8. INNER JOIN Trabajadores AS T ON P.CodigoTrabajador = T.CodigoTrabajador
  9. INNER JOIN LineasOrdenesProduccion AS L ON P.IdLineaOrdenProduccion = L.IdLineaOrdenProduccion
  10. LEFT JOIN AsistenciasTrabajadores A ON P.CodigoTrabajador = A.CodigoTrabajador AND P.Fecha = A.Fecha
Actualmente se demora 36 segundos en ejecutarse.
En cambio, si le cambio los dos INNER JOIN por LEFT JOIN, como sigue:
Código SQL:
Ver original
  1. SELECT P.Fecha AS Fecha,
  2. P.CodigoTrabajador AS CodigoTrabajador,
  3. T.Nombre AS NombreTrabajador,
  4. 'PARTE TRABAJO' AS TipoIncidencia,
  5. P.HoraInicio AS HoraInicio,
  6. 'Parte sin Asistencia | ' + L.CodigoOrdenProduccion + ' | ' + P.CodigoOperacion + ' - ' + L.NombreOperacion AS Descripcion
  7. FROM PartesTrabajo P
  8. LEFT JOIN Trabajadores AS T ON P.CodigoTrabajador = T.CodigoTrabajador
  9. LEFT JOIN LineasOrdenesProduccion AS L ON P.IdLineaOrdenProduccion = L.IdLineaOrdenProduccion
  10. LEFT JOIN AsistenciasTrabajadores A ON P.CodigoTrabajador = A.CodigoTrabajador AND P.Fecha = A.Fecha
En este caso la consulta se ejecuta en 1 segundo.
Y lo más curioso es que el resultado es el mismo tanto en una como en la otra.
¿Alguien capaz de explicar esto puede iluminarme un poco?
Muchas gracias y un saludo.
__________________
..:: moNTeZIon ::..
  #2 (permalink)  
Antiguo 12/05/2011, 12:37
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: LEFT JOIN corre infinitamente más rápido que INNER JOIN

Checate estas ligas

http://www.c-sharpcorner.com/UploadF.../SqlJoins.aspx

http://www.mssqltips.com/tip.asp?tip=1667

Saludos!!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 13/05/2011, 01:57
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Respuesta: LEFT JOIN corre infinitamente más rápido que INNER JOIN

Gracias Libras.
Muy interesantes los enlaces.
Aunque en muchas ocasiones me viene bien una explicación llana sobre un concepto tan concreto, y si es en mi idioma todavía me queda más claro. Lo voy a intentar, a ver si me puedes corregir.
Se podría decir que INNER JOIN va a recorrer todas las filas coincidentes en las dos tablas, mientras que LET JOIN (que es un outer join) tomará todas las filas de la primera tabla, y solamente una de la segunda tabla, de forma que el proceso se ahorra recorrer el resto de filas coincidentes.
¿Esto es correcto?
Si fuera correcto, sólo un detalle más. ¿Esa fila que muestra de la segunda tabla con LEFT JOIN, de qué fila se trataría en el caso de que existieran varias filas?
Gracias por las aclaraciones.
Saludos.
__________________
..:: moNTeZIon ::..
  #4 (permalink)  
Antiguo 18/05/2011, 03:45
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 20 años, 9 meses
Puntos: 0
Respuesta: LEFT JOIN corre infinitamente más rápido que INNER JOIN

Con un left join te van ha salir todas las filas de la primera tabla tengan o no filas en la segunda tabla.

Si en la segunda tabla hubiese más de una fila te salen todas, de manera que se repiten las filas de la primera tabla.

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #5 (permalink)  
Antiguo 18/05/2011, 07:53
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Respuesta: LEFT JOIN corre infinitamente más rápido que INNER JOIN

Gracias DjNelson! Más claro el agua.
Saludos.
__________________
..:: moNTeZIon ::..

Etiquetas: corre, join, left
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:21.