2017-08-20 132 views
-5

有沒有更好的方法來寫這個?爲什麼這個查詢需要很多時間來執行?

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

請編輯問題,正確格式化,爲您正在使用的數據庫添加標籤以及查詢計劃,以及表格定義,索引等。因爲沒有人能說出任何關於它的信息。 –

+1

你需要更詳細地解釋你的問題。這個問題不是一個有效的StackOverflow問題。關於如何發佈問題的指導原則在這裏:https://stackoverflow.com/help/how-to-ask – Reeza

+2

你在'SELECT'中有'SUB_TYPE1,KPI',但它們不在'GROUP BY'中。你的查詢沒有意義。 –

回答

0

在此查詢中有一個明顯的性能反模式。你有

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

如果dateDATETIMETIMESTAMP,OR DATE列,更改到

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

甚至

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

然後在(date, KPINAME)兩個表創建索引。這將使您的WHERE子句至少部分sargable

此外,你似乎是誤用GROUP BY。這跟集合函數一樣,如MAX()AVG()。你的意思是ORDER BY

+0

此外,您在2017年檢查'ggsn_kpi_2016'幾天;這似乎是錯誤的? –

相關問題