Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/08/2011, 11:44
turfeano
 
Fecha de Ingreso: diciembre-2008
Mensajes: 190
Antigüedad: 15 años, 4 meses
Puntos: 6
Optimizar consulta - LEFT JOIN'S

Buenas , tengo un incoveniente, resulta que tengo una consulta que demora 20 segundos (contra una tabla t1 de 1500 registros y otra t2 de 12000) .
No puedo encontrarle la vuelta, muestro la consulta y lo que probe
Inicialmente:
Código MySQL:
Ver original
  1. SELECT t1.campos,t4.campo FROM
  2. tabla1 t1
  3. LEFT JOIN t2 ON (t2.camposinindice = t1.id and t2.otrocampo=1 )
  4. LEFT JOIN t3 ON (t3.id  = t2.campo3 )
  5. LEFT JOIN t4 ON (t4.id = t3.campodet3)
  6. WHERE 1=1
  7. GROUP by t1.id

Como veran necesitaba un campo de t4 a partir de t1 (ya que es una consulta a esa tabla, en este caso a todos los registros)

El tema es que t2 al cruzarse con t1 puede devolver mas de un registro, y al querer cruzar t3 con t2 se genera un conflicto (creo q esta ahi el meollo) ya que trae mas de un registro.

Ahora quise solucionarlo devolviendo un solo resultado en ese LEFT JOIN pero solo consegui reducir 5 segundos. (con la siguiente sentencia, saque t2):

Código MySQL:
Ver original
  1. SELECT t1.campos,t4.campo FROM
  2. tabla1 t1
  3. LEFT JOIN tabla3 t3 ON
  4.                         (t3.id =
  5.                                 (   SELECT t2b.campo3
  6.                                     FROM tabla2 t2b
  7.                                     WHERE t2b.otrocampo=1
  8.                                     AND t2b.camposinindice = t1.id
  9.                                    
  10.                                     LIMIT 1
  11.                                 )
  12.                         )
  13. LEFT JOIN t4 ON (t4.id = t3.campodet3)
  14. WHERE 1=1
  15. GROUP by t1.id

Agradezco mucho su tiempo y ayuda ya que estoy perdido.
Saludos