Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/06/2009, 05:41
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Left join con problemas

Esto:
Código sql:
Ver original
  1. SELECT
  2.     COUNT(facturas.id) num,
  3.     COUNT(conceptos.id) total
  4. FROM pedidos p LEFT  JOIN conceptos c ON p.id = c.id_pedido
  5.    LEFT JOIN facturas f ON p.id = f.id_pedido
  6. GROUP BY pedidos.id
podría estar duplicando ciertos registros, ya que LEFT JOIN opera sobre la tabla izquierda (la primera) y devuelve todas las combinaciones con la derecha, incluyendo los resultados NULL, pero en ese caso el campo de la primera tabla se repite, con lo que pasa a ser válido y facturas.id puede estar sumándose de nuevo.

Yo lo probaría así:
Código sql:
Ver original
  1. SELECT
  2.     COUNT(facturas.id) num,
  3.     COUNT(conceptos.id) total
  4. FROM pedidos p INNER JOIN conceptos c ON p.id = c.id_pedido
  5.    INNER JOIN facturas f ON p.id = f.id_pedido
  6. GROUP BY pedidos.id
INNER JOIN te devolverá sólo aquellos en los que el campo en ON coincida.

En cuanto a la cantidad de registro, no te extrañe que tarde, porque en ese contexto (3.000 registros/tabla), LEFT JOIN podría estar procesando 18.000.000.000 registros para realizar la cuenta. Además, los GROUP BY llevan tiempo.

Usa EXPLAIN para ver cómo está cruzando los datos y si está usando índices.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 09/06/2009 a las 05:47