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

SQL Server 預存程序演進史:2008 到 2012 關鍵效能特性回顧

     編輯:關於SqlServer

版本演進時間軸

  • SQL Server 2008:引入表值參數、MERGE、GROUPING SETS、行建構器
  • SQL Server 2008 R2:少量調整
  • SQL Server 2012:欄存索引、大物件線上重建索引、FORCESEEK/FORCESCAN 提示

SQL Server 2008 關鍵特性

1. 表值參數 (Table-Valued Parameters, TVP)

  • 將多列資料打包成單一參數傳遞,減少往返
  • 不需建立暫存表、不需大量標量參數
  • 讀取無鎖、支援排序順序
  • 使用流程:建立使用者定義表類型 → SP 參數使用該類型 → 呼叫端宣告表變數填資料 → 傳入 SP

2. MERGE 陳述式

  • 單一陳述式完成 INSERT/UPDATE/DELETE (UPSERT)
  • 適用:兩表同步、資料倉庫 ETL、緩慢變維度 (SCD)
  • 配合適當索引可大幅減少掃描

3. GROUPING SETS

  • 單一查詢產生多種群組彙總 (替代多次 GROUP BY + UNION ALL)
  • 減少 I/O、記憶體、執行時間
  • 範例:GROUP BY GROUPING SETS ((A,B), (A), (B), ())

4. 行建構器 (Row Constructors)

  • 單一 INSERT 插入多列:VALUES (v1,v2), (v3,v4), ...
  • 每陳述式最多 1000 列
  • 減少網路流量、客戶端處理時間、交易次數
  • 實測:10 批 × 1000 列 = 10000 列,整體時間降低 50%+

SQL Server 2012 關鍵特性

1. 欄存索引 (Columnstore Index)

  • VertiPaq 架構:欄導向儲存、高壓縮、批次模式處理
  • 資料倉庫查詢加速 10x~1000x
  • 限制:表變唯讀 (2012),2014+ 支援可更新叢集欄存索引
  • 不支援型別:LOB、MAX 型別、CLR、XML、高精度 decimal、timestamp

2. 大物件 (LOB) 線上重建索引

  • 2008 R2 及之前:VARCHAR(MAX), NVARCHAR(MAX), VARBINARY(MAX), XML 無法線上重建
  • 2012:支援 ALTER INDEX ... REBUILD WITH (ONLINE = ON) 對 LOB 欄位
  • 消除維護視窗限制、提升可用性

3. FORCESCAN 查詢提示

  • 優化器低估列數誤選 Index Seek 時,強制 Index Scan
  • 適用:小表掃描比 Seek 快、參數嗅探導致計畫不穩

總結

每個版本都帶來實質效能提升工具。2008 解決參數傳遞、UPSERT、彙總、批次插入痛點;2012 以欄存索引重新定義分析型查詢效能。升級版本即獲得效能紅利,配合應用層改寫效果最大。

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