第一步:MES 系統資料表設計 (DDL) #
我們設計六張核心表,涵蓋工單、批次(Lot)、機台、過帳紀錄與參數採集。
|
|
第二步:快速產生 1,000 萬筆資料 (DML) #
對於 10M 等級的資料,建議使用 /*+ APPEND */ 進行直接路徑插入 (Direct Path Insert),並將表設為 NOLOGGING 以加快速度。
注意: 執行前請確認磁碟空間充足(預計約需 10GB~20GB 空間)。
|
|
(以此類推完成其他表,建議分批 Commit 或調整 Undo Segment)
第三步:10 組 MES 調校專用 SQL #
1. 基礎查詢:索引失效測試 #
情境: 找出某個時間區段內的過帳紀錄,但
START_TIME被套用了函數導致無法走 Index。
|
|
2. 聚合分析:產線稼動率計算 #
情境: 計算每台設備在過去一週的總加工時數(End - Start)。這在 10M 筆資料下會觸發大量 Hash Aggregate。
|
|
3. 多表關聯:WIP 在製清單 #
情境: 找出所有狀態為 ‘Open’ 的工單中,目前被 ‘Hold’ 住的 Lot 以及它們所在的機台。
|
|
4. 視窗函數:Lead/Lag 分析 (進程時效) #
情境: 計算每個 Lot 從上一個站點到下一個站點的「移轉時間」(Transfer Time)。
|
|
5. 品質數據追蹤:離群值檢索 #
情境: 找出所有量測值 (VALUE_NUM) 超出上下限且屬於 ‘Electronics’ 類別設備生產的 Lot。
|
|
6. 複雜子查詢:尚未完成量測的批次 #
情境: 找出已過帳 (TRACKOUT) 但在
MES_QUALITY_DATA表中卻沒有對應數據的紀錄(測試 NOT EXISTS 效能)。
|
|
7. CLOB 全文檢索與效能瓶頸 #
情境: 在 1000 萬筆日誌中,搜尋 Stack Trace 包含 ‘NullPointerException’ 且發生在特定機台模組的錯誤。
|
|
8. 階層式查詢 (Hierarchical):批次拆分追溯 (Split/Merge) #
情境: 在 MES 中,Lot 會被拆分或合併,利用
CONNECT BY找出某個祖先批次的所有子孫批次(假設有 Parent_Lot 欄位)。
|
|
9. 關聯子查詢更新 (Correlated Update) #
情境: 根據最新的
MES_MOVE_HISTORY更新MES_WIP_LOTS的當前站點CURR_STEP。這在大表更新時非常耗時。
|
|
10. 終極挑戰:多維度生產報表 (Complex Pivot/Rollup) #
情境: 產生一份報表,按「日、班別 (Shift)、機台類型」統計良率,並計算與前一天的增長率。
|
|
下一步建議 #
在 1,000 萬筆資料下,索引的選擇(B-Tree vs Bitmap)以及 Partitioning (分區) 會是效能的關鍵。
您是否希望我針對其中一個 SQL,示範如何建立 Partition (範圍或雜湊分區) 來大幅提升查詢速度?