原SQL,因爲要轉化省份是NULL的情況,在group by 的字段中需要做IFNULL(province_id, 999)
SELECT 20140311,
app_id,
IFNULL(province_id, 999),
2160101,
COUNT(DISTINCT imei)
FROM XXXX a
WHERE a.op_day_id <= 20140311
AND a.op_day_id >= DATE_FORMAT(DATE_ADD(20140311, INTERVAL - 29 DAY), '%Y%m%d')
GROUP BY app_id, IFNULL(province_id, 999);
執行時間:3分44秒
優化後的SQL,判斷NULL,在load入infobright前處理掉
SELECT 20140311,
app_id,
province_id,2160101,
COUNT(DISTINCT imei)
FROM XXXXX a
WHERE a.op_day_id <= 20140311
AND a.op_day_id >= DATE_FORMAT(DATE_ADD(20140311, INTERVAL - 29 DAY), '%Y%m%d')
GROUP BY app_id,province_id;
執行時間:44s
結論:infobright的優勢在處理計算彙總,如果過程含有函數處理,相對會慢些