Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/05/2011, 10:11
Avatar de moNTeZIon
moNTeZIon
 
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 4 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 ::..