兩個不同 Schema/資料庫 {4}、{5} 存放相似結構的工單資料,需統計指定時間區間 {1}~{2}、部門 {3} 的「未解決」與「已解決」數量。
c809000021<>'已關閉' AND c809000021='已關閉' 互斥,需確認業務邏輯c809000012 vs c811020016 應為同義欄位,建議建立 View 統一介面UNION ALL 替代 UNION:避免排序去重,效能提升 50%+{1}~{5} 應使用 Bind Variable 防注入WITH params AS (
SELECT :start_dt AS start_dt, :end_dt AS end_dt, :dept AS dept FROM dual
),
src_a AS (
SELECT '未解決' AS protype, COUNT(DISTINCT c1) AS procount
FROM {4} t1, params p
WHERE t1.c700000006 BETWEEN p.start_dt AND p.end_dt
AND t1.c809000012 = p.dept
AND t1.c809000021 != '已關閉'
AND t1.c809000001 IS NOT NULL
UNION ALL
SELECT '未解決', COUNT(DISTINCT c1)
FROM {5} t2, params p
WHERE t2.c700000006 BETWEEN p.start_dt AND p.end_dt
AND t2.c811020016 = p.dept
AND t2.c700000010 != '已關閉'
AND t2.c811020001 IS NOT NULL
UNION ALL
SELECT '已解決', COUNT(DISTINCT c1)
FROM {4} t3, params p
WHERE t3.c700000006 BETWEEN p.start_dt AND p.end_dt
AND t3.c809000012 = p.dept
AND t3.c809000021 = '已關閉'
AND t3.c809000001 IS NOT NULL
UNION ALL
SELECT '已解決', COUNT(DISTINCT c1)
FROM {5} t4, params p
WHERE t4.c700000006 BETWEEN p.start_dt AND p.end_dt
AND t4.c811020016 = p.dept
AND t4.c700000010 = '已關閉'
AND t4.c811020001 IS NOT NULL
)
SELECT protype, SUM(procount) AS total_count
FROM src_a
GROUP BY protype
ORDER BY protype;
V_TICKET_STATS 統一欄位名(ticket_id, status, dept_code, create_dt, category)MV_DAILY_TICKET_STATS,報表直接查詢 MV,秒級回應create_dt 範圍分區,歷史資料自動歸檔,查詢自動分區裁剪| 方案 | 預估回應時間 | 維護成本 |
|---|---|---|
| 原始 UNION 查詢 | 10-30 秒 | 高(硬編碼欄位名) |
| 重構 CTE + UNION ALL | 3-8 秒 | 中 |
| 統一 View + DB Link | 2-5 秒 | 低 |
| 物化視圖預聚合 | < 0.5 秒 | 低(定時刷新) |