Ver Mensaje Individual
  #4 (permalink)  
Antiguo 28/12/2011, 13:43
Avatar de leo_
leo_
 
Fecha de Ingreso: abril-2008
Mensajes: 40
Antigüedad: 16 años
Puntos: 11
Busqueda Respuesta: Optimizar consulta

Hola acomode un poco el código para que sea más legible y me parece que le estas errando en el uso del "case when 1=1" creo q ahi esta tu cuello de botella no soy experto en el funcionamiento interno de MySQL pero fijate que por cada registro en t2 le estas pidiendo que arme 7 tablas más y que sume los registros a mi eso me suena a excesivo. Quizás puedas ver este post de leonardo_josue y te des una idea de como formular mejor la consulta. O si nos puedas dar un poco mas de detalle de las estructuras de las tablas en cuanto a las columnas q ocupas para la consulta y algunos registros de ejemplo podría intentar darte alguna mano.
Por ejemplo no tengo forma de probarlo pero me parece q algo como:
Código MySQL:
Ver original
  1. SELECT     IF(FECHA = (SELECT DATE_SUB(max(FECHA),INTERVAL 6 DAY) FROM ces_ivr_eventos),sum(t1.cant_cuentas)) DAY_1,
  2.         IF(FECHA = (SELECT DATE_SUB(max(FECHA),INTERVAL 5 DAY) FROM ces_ivr_eventos),sum(t1.cant_cuentas)) DAY_2,
  3.         IF(FECHA = (SELECT DATE_SUB(max(FECHA),INTERVAL 4 DAY) FROM ces_ivr_eventos),sum(t1.cant_cuentas)) DAY_3,
  4.         IF(FECHA = (SELECT DATE_SUB(max(FECHA),INTERVAL 3 DAY) FROM ces_ivr_eventos),sum(t1.cant_cuentas)) DAY_4,
  5.         IF(FECHA = (SELECT DATE_SUB(max(FECHA),INTERVAL 2 DAY) FROM ces_ivr_eventos),sum(t1.cant_cuentas)) DAY_5,
  6.         IF(FECHA = (SELECT DATE_SUB(max(FECHA),INTERVAL 1 DAY) FROM ces_ivr_eventos),sum(t1.cant_cuentas)) DAY_6,
  7.         IF(FECHA = (SELECT DATE_SUB(max(FECHA),INTERVAL 0 DAY) FROM ces_ivr_eventos),sum(t1.cant_cuentas)) DAY_7
  8.         SELECT NMRO_CICLO, count(DISTINCT NMRO_CUENTA) as cant_cuentas
  9.         FROM ces_ivr_reporte_comercial, ces_ivr_eventos  
  10.         WHERE RUT_CUENTA=RUT AND ABREV_EVENTO='comercial'
  11.         GROUP BY RUT_CUENTA, NMRO_CICLO
  12.         HAVING count(DISTINCT NMRO_CUENTA) < 2) t1
quizas se ejecute un poco mas rapido (el ejemplo no es funcional). Pero como te dije sin mas info no tengo forma de terminar esta consulta. Saludos.
__________________
Di que no haces las cosas para que te las agradezcan, pero trata de hacerlas para gente agradecida. Cipriano.

Última edición por leo_; 28/12/2011 a las 13:52 Razón: El ejemplo no va a funcionar porq en la clausula from FECHA no existe recién me di cuenta :$ pero esa seria la idea...