2017-08-20 1 views
-5

Y a-t-il une meilleure façon d'écrire ceci?pourquoi cette requête prend autant de temps à s'exécuter?

select Date, NeName, KPINAME, SUB_TYPE1, KPI 
from ggsn_kpi_2017 
where date 
    in ('2017-08-19', '2017-08-18', '2017-08-17', '2017-08-16', '2017-08-15', 
    '2017-08-14', '2017-08-13') 
    and KPINAME in('SM_SUCC_SESS_ACT_GGSN', 'SM_FAIL_SESS_ACT_GGSN', 'SM_SUCC_SESS_ACT_P_GW', 'SM_FAIL_SESS_ACT_P_GW', 
    'SM_SUCC_SESS_ACT_SAE_GW', 'SM_FAIL_SESS_ACT_SAE_GW', 
    'SM_DOWNLINK_BYTES_M2M', 'SM_UPLINK_BYTES_M2M') 

    group by Date, NeName, KPINAME 

    union 

    select Date, NeName, KPINAME, SUB_TYPE1, KPI 
    from ggsn_kpi_2016 
    where date in ('2017-08-19', '2017-08-18', '2017-08-17', '2017-08-16', 
    '2017-08-15', '2017-08-14', '2017-08-13') 
    and KPINAME in('SM_SUCC_SESS_ACT_GGSN', 'SM_FAIL_SESS_ACT_GGSN', 'SM_SUCC_SESS_ACT_P_GW', 
    'SM_FAIL_SESS_ACT_P_GW', 'SM_SUCC_SESS_ACT_SAE_GW', 
    'SM_FAIL_SESS_ACT_SAE_GW', 'SM_DOWNLINK_BYTES_M2M', 'SM_UPLINK_BYTES_M2M') 
    group by Date, NeName, KPINAME; 
+1

Veuillez éditer la question, la mettre en forme correctement, y ajouter les balises de la base de données que vous utilisez, ainsi que le plan de requête ainsi que les définitions de tableaux, d'index etc. –

+1

Vous devez expliquer plus en détail votre problème. Cette question n'est pas valide en tant que question StackOverflow. Les directives sur la façon de poser une question sont ici: https://stackoverflow.com/help/how-to-ask – Reeza

+2

Vous avez 'SUB_TYPE1, KPI' dans 'SELECT', mais ils ne sont pas dans le' GROUP BY' . Votre requête n'a pas de sens. –

Répondre

0

Il existe un anti-modèle de performance évident dans cette requête. Vous avez

where date in ('2017-08-19', '2017-08-18', '2017-08-17', '2017-08-16', 
'2017-08-15', '2017-08-14', '2017-08-13') 

Si date est DATETIME, TIMESTAMP, OU DATE colonne, changer cela à

where date >= '2017-08-13' 
    and date < '2017-08-20' 

ou même

where date >= '2017-08-13' 
    and date < '2017-08-13' + INTERVAL 1 WEEK 

Ensuite, créez des index sur (date, KPINAME) pour les deux tables. Cela rendra votre clause WHERE au moins en partie sargable.

De même, vous semblez utiliser abusivement GROUP BY. Cela va avec des fonctions agrégées comme MAX() et AVG(). Voulez-vous dire ORDER BY?

+0

En outre, vous vérifiez 'ggsn_kpi_2016' pour les jours de 2017; cela semble faux? –