首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 優化實戰:從 30 分鐘縮短至 30 秒的查詢重寫

     編輯:關於SqlServer

原查詢 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 橫跨兩組不同表別名,導致優化器無法有效利用索引、產生笛卡爾積式掃描。重寫策略:

  1. 拆分為兩個獨立查詢,各自利用索引高效執行。
  2. 以 UNION ALL 合併結果集 (業務確認無重複)。
  3. 外層再做聚合/過濾。

優化後運行 30 秒內。核心教訓:複雜 OR 條件跨表別名是性能殺手,拆分+UNION ALL 是通用解法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved