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 originalSELECT 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.