Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/11/2014, 13:53
Avatar de David_Carrera_G
David_Carrera_G
 
Fecha de Ingreso: noviembre-2014
Ubicación: Santiago
Mensajes: 37
Antigüedad: 10 años
Puntos: 1
Pregunta Optimar consulta SELECT

Estimados, el motivo de este tema es por una consulta SQL la cual realice hace mucho tiempo en una BD que ahora administro, el tema es que he estado falto de practica y no se me ocurre de que forma puedo optimizar la siguiente consulta:

Código SQL:
Ver original
  1. SELECT  a.*,b.moroso,
  2.              round((datediff(curdate(),(STR_TO_DATE(LEFT(b.activacion,10),'%Y-%m-%d')))/30),0) AS MES,c.`Plan Recomendado`
  3.  
  4. FROM
  5. tbl_desconectados a
  6. INNER JOIN arrears_paso b  ON a.customer_id = b.NRO_SUSCRIPTOR
  7. INNER JOIN ISE_SCORE_NOV14 c ON a.customer_id = c.CLIE_CODIGO
  8. WHERE a.ip=1
  9. AND a.fecha_generacion = '2014-11-13'
  10. AND a.proxy='33'
  11. AND a.pais = 'CHI'
  12. AND a.Contactabilidad = 1
  13. AND b.ESTADO_PRODUCTO = 'D'
  14. AND YEAR(CAST(b.ACTIVACION AS DATE)) = YEAR(curdate()) - 2
  15. AND NOT a.customer_id IN (SELECT ibs FROM compromisos_chile)
  16. ORDER BY RAND() LIMIT 200

Como se puede observar la consulta tiene dos partes conflictivas:

1.- cuando hago el calculo de los meses que lleva el cliente con mora(3 campo del select)
2.- Cuando defino el criterio de búsqueda, el cual debe ser dos años atrás de la fecha actual

Mi problema replica en que el total de registros que me devuelve esta tabla es de 300.000, por lo cual se demora a lo menos 15 minutos en darme el resultado esperado, habrá una forma de optimizar esta query, para reducir su tiempo de espera. Saludos y desde ya gracias.