原查詢 8 表 JOIN、複雜 OR/AND 條件,運行 30 分鐘。索引、關聯、業務邏輯均無誤。關鍵發現:
WHERE (ComFlow.SalType IN ('促銷','流向退貨','多級流向') AND ComFlow.CustCode = Customer.CustCode)
OR (ComFlow_1.SalType IN ('自然流向','自然流向退貨') AND ComFlow_1.OutCustCode = Customer_1.CustCode)
OR 橫跨兩組不同表別名,導致優化器無法有效利用索引、產生笛卡爾積式掃描。重寫策略:
UNION ALL 合併結果集 (業務確認無重複)。優化後運行 30 秒內。核心教訓:複雜 OR 條件跨表別名是性能殺手,拆分+UNION ALL 是通用解法。