Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/08/2012, 10:03
fzeromusic
 
Fecha de Ingreso: agosto-2012
Mensajes: 7
Antigüedad: 12 años, 3 meses
Puntos: 0
Sonrisa Sub consulta muy lenta, pasar a join????

Hola a todos de nuevo, tengo una consulta de mysql la cual funciona bien el problema es cuando trato de hacer la consulta en toda la tabla, ésta tabla con la que trabajo es muyyyyyyy grande y he leído que las subconsultas tienen pésimo rendimiento con tablas tan grandes, no se si cambiar la consulta con un join, si es así lo intenté pero me marca un error tras otro, ¿alguien tiene una mejor idea?

el query es el siguiente:

Código:
SELECT 
   plan.numero_prestamo, 
   plan.numero_cuota, 
   plan.numero_cuota+1 AS proxima_cuota,
   plan.periodo,
   plan.codigo_tipo_saldo,
FROM 
   pr_saldos_plan_pago_mes plan
WHERE 
   plan.numero_prestamo = 1 AND
   plan.numero_cuota IN
      ( SELECT 
            MAX( numero_cuota ) AS ultima_cuota 
        FROM 
            pr_saldos_plan_pago_mes 
        WHERE 
            numero_prestamo = 1 )
Este query me arroja bien los resultados, solo que pueden notar que hay un filtro "where" con el cual me arroja solo los numero de prestamo = 1, la idea es que me arroje todos los demás, pero al quitarle los where la consulta se vuelve eterna, lleva ejecutándose 20 hrs y aún no tengo respuesta, cabe destacar que hay mínimo 50mil créditos diferentes, es decir, es una gran tabla, no me importa esperar mucho tiempo en el query, pero mas de 20hrs??? imposible, necesito reducirlo a máximo poco mas de una hora....los resultados con el where incluido son:

Código:
numero_prestamo	numero_cuota	proxima_cuota	periodo	codigo_tipo_saldo
1		153		154		12		55
1		153		154		12		6
1		153		154		12		2
1		153		154		12		53
1		153		154		12		1
ahora se debe hacer eso, pero sin filtrar solo en numero de préstamo "1"


Alguien tiene una idea de como optimizar éste proceso???? muchas gracias de antemano!

PD: otra idea que tuve era hacer la consulta sin subconsulta, mas simplificado como:

SELECT *
FROM
pr_saldos_plan_pagos
WHERE
numero_prestamo = 1
ORDER BY
numero_cuota DESC
LIMIT
5


El resultado da el mismo, el gran problema es que el "limit 5" tendría que ser variable siempre, ya que cada numero de prestamo varía la cantidad de numero de cuota, en este caso es 5, pero puede ser 1, puede ser 3, puede ser 9, etc, etc. eso destruye la lógica