Esto:
Código sql:
Ver originalSELECT
COUNT(facturas.id) num,
COUNT(conceptos.id) total
FROM pedidos p LEFT JOIN conceptos c ON p.id = c.id_pedido
LEFT JOIN facturas f ON p.id = f.id_pedido
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 originalSELECT
COUNT(facturas.id) num,
COUNT(conceptos.id) total
FROM pedidos p INNER JOIN conceptos c ON p.id = c.id_pedido
INNER JOIN facturas f ON p.id = f.id_pedido
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.