Ver Mensaje Individual
  #4 (permalink)  
Antiguo 24/07/2015, 22:28
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: Combinar 5 tablas ?

MySQL no optimiza el WHERE, por lo que no es buena idea usar JOIN implícitos (la coma), sino explícitos. El FROM si es optimizado y por ello cuando tienes muchos registros, la performance de un INNER JOIN es usualmente superior.
Con el JOIN implícito es posible que haga una lectura de tipo full table scan, lo que es espantoso, y en algunos casos puede generar productos cartesianos (el peor escenario).
En lugar de eso, el INNER JOIN va devolviendo sólo los registros oincidentes, basados en un indice de FK, cuando las foreign key se han definido (es recomendable no usar tablas MyISAM en este tipo de relaciones).
Por otro lado, el GROUP BY es una cláusula asesina de la performance, ya que s eaplica al resultado luego de ser leído. Es preferible para tu caso usar el DISTINCT, que va descartando repeticiones mientras las recupera, en lugar de hacerlo al final.

La idea sería mas o menos así:
Código SQL:
Ver original
  1. SELECT DISTINCT
  2.     DC.dir_cat_id, DC.dir_cat_nombre
  3. FROM
  4.     dir_categ DC
  5.     INNER JOIN dir_rubro_x_cat DRC ON DC.dir_cat_id = DRC.dir_cat_id
  6.     INNER JOIN dir_rubro_x_empr DRE ON DRC.dir_rubro_id = DRE.dir_rubro_id
  7.     INNER JOIN dir_empresa DE ON DRE.dir_empr_id = DE.dir_empr_id ;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)