首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

.NET 應用性能優化指南(四):SQL Server 架構與查詢深度調優

     編輯:關於.NET

本文為「.NET 應用性能優化」系列第四篇,聚焦 SQL Server 的擴容策略、Schema 設計、查詢優化、索引策略、事務管理、執行計劃分析及部署運維實戰清單。

擴容策略:先優化,再 Scale Up,最後 Scale Out

  • 優化優先:減少無效鎖、參數化查詢、優化索引,榨乾單機性能。
  • 分離歷史/報表數據:歸檔唯讀歷史數據至獨立庫/數據倉庫,避免污染線上 OLTP 性能。
  • Scale Up (縱向):升級 CPU、記憶體、磁盤 (啟用 /3GB、AWE),性價比最高。
  • Scale Out (橫向):水平分表、分庫、復制、聯邦服務器,引入分佈式事務與運維複雜度,謹慎評估。

Schema 設計黃金法則

  • 投入充分設計資源:上線前徹底建模測試,上線後修改代價極高。
  • OLAP 與 OLTP 隔離:長查詢報表分流至專用報表庫/SSAS,不阻塞高併發事務。
  • 先範式化,後反範式化:以 3NF 為基礎,針對熱點查詢引入冗余列/索引視圖優化讀性能。
  • 完整定義 PK/FK/唯一約束/Check 約束:助力優化器生成最優計劃,利用 DRI (聲明式引用完整性) 替代觸發器實現級聯操作。
  • 選型最窄適用類型:smallint > int,避免隱式轉換殺死索引,慎用 sql_variant、text/ntext,優先 nchar/nvarchar (Unicode 環境)。
  • 垂直/水平分表:冷熱列分離、按時間範圍分區,結合分區視圖或數據依賴路由。

查詢與索引實戰準則

  • 只取所需列/行:禁用 SELECT *,大結果集強制分頁。
  • 拒絕 NOT LIKE、<> 等 SARGable 反模式:優先 EXISTS/NOT EXISTS,避免列上加函數/隱式轉換。
  • 鎖提示與隔離級別精準控制:NOLOCK 讀不阻寫,UPDLOCK 防死鎖,批量更新用 TABLOCK 降低鎖開銷。
  • 存儲過程/參數化查詢:防注入、計劃複用、邏輯分離。
  • 索引策略:窄鍵聚簇索引、外鍵必建索引、高選擇性列建索引、核心查詢建覆蓋索引、複合索引首列放最強過濾列、移除未用索引。

事務與執行計劃管理

  • 事務極短、晚獲取早釋放、統一訪問順序防死鎖、顯式 Commit/Rollback。
  • 避免 DDL/DML 交織、游標操作臨時表導致重編譯;動態 SQL 用 sp_executesql。
  • 定期分析執行計劃:消除 Table/Index Scan、評估 Hash Join/Bookmark Lookup/Sort 操作、對比實際 vs 估計行數 (更新統計信息)。

運維與部署檢查清單

  • 預增長數據/日誌文件,禁用自動收縮,合理配置 RAID (TempDB 建議 RAID 0+1)。
  • 分離數據/日誌/TempDB 至不同物理磁盤/控制器。
  • 監控緩存命中率 (>90%)、可用內存、鎖/阻塞 (sp_lock, DMV)、長事務 (DBCC OPENTRAN)。
  • 定期重建/整理索引碎片 (ONLINE 選項),建立 DBA 與開發反饋機制。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved