Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/07/2014, 01:42
Avatar de Heent
Heent
 
Fecha de Ingreso: diciembre-2008
Mensajes: 140
Antigüedad: 16 años
Puntos: 6
Pregunta Consulta muy larga

Buenas gente, tengo unas tablas con unos cuantos registros (foto e imatges tienen aproximadamente 100k registros cada una mientras que familia y autor no llegan a los 3k). La cosa es que hay información interrelacionada entre las distintas tablas que es:

Cada foto tiene una familia, un autor y una imagen. Están relacionados con un id, es decir cada autor y familia tienen un identificador que es el que está guardado a la tabla de foto.

Entonces me gustaría recuperar todas las fotos de un pueblo determinado (cada foto procede de un pueblo) con la información completa de cada autor y familia también. Por lo que estoy viendo en el servidor mi consulta es muy poco optima porqué satura toda mi CPU y tarda un montón.

Código MySQL:
Ver original
  1. SELECT f.des, f.referencia, f.familia AS num, f.fons,
  2.                a.nombre AS autor, fa.nombreMostrar AS familia, img.url
  3.  
  4.         FROM foto f
  5.  
  6.         LEFT JOIN ( SELECT a.nombre, a.id
  7.                     FROM autor a
  8.                     GROUP BY a.id ) a ON f.autor=a.id
  9.  
  10.         LEFT JOIN ( SELECT fa.nombreMostrar, fa.numero, fa.id
  11.                     FROM familia fa
  12.                     WHERE fa.pueblo='$pueblo'
  13.                     GROUP BY fa.id ) fa ON f.familia=fa.numero
  14.  
  15.         LEFT JOIN ( SELECT img.url, img.referencia
  16.                     FROM imatges img
  17.                     GROUP BY img.referencia ) img ON f.referencia=img.referencia
  18.  
  19.         WHERE pueblo='$pueblo' ORDER BY f.referencia;

¿Como podría optimizar la consulta?


Un slaudo y muchas gracias!