Código SQL:
Ver original
SELECT a.*,b.moroso, round((datediff(curdate(),(STR_TO_DATE(LEFT(b.activacion,10),'%Y-%m-%d')))/30),0) AS MES,c.`Plan Recomendado` FROM tbl_desconectados a INNER JOIN arrears_paso b ON a.customer_id = b.NRO_SUSCRIPTOR INNER JOIN ISE_SCORE_NOV14 c ON a.customer_id = c.CLIE_CODIGO WHERE a.ip=1 AND a.fecha_generacion = '2014-11-13' AND a.proxy='33' AND a.pais = 'CHI' AND a.Contactabilidad = 1 AND b.ESTADO_PRODUCTO = 'D' AND YEAR(CAST(b.ACTIVACION AS DATE)) = YEAR(curdate()) - 2 AND NOT a.customer_id IN (SELECT ibs FROM compromisos_chile) 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.