SQL Server 2005 (代號 Yukon) 是里程碑式版本,引入 .NET 整合、新資料類型、分區表、快照隔離等重大特性。本文從資料庫設計、開發體驗、DBA 管理三大面向深度對比,並列出 2005 仍存的遺憾。
VARCHAR(MAX)、NVARCHAR(MAX)、VARBINARY(MAX) 取代 TEXT/NTEXT/IMAGE,支援字串函數直接操作,避免舊類型需用 TEXTPTR、UPDATETEXT 的痛苦。MAX 類型若超過 8KB 會移至 LOB 儲存,可能產生碎片,大量更新時效能需測試。XML 資料類型、XQuery/XPath 查詢、XML 索引、Schema 集合驗證。SET NULL、SET DEFAULT 兩種參考動作,配合 CASCADE 更靈活處理父子關係。INCLUDE 非鍵值欄位,實現「覆蓋索引」避免 Key Lookup,實測效能提升 ~30%。PERSISTED 將計算結果實際寫入資料頁,查詢不再即時運算,大幅提升讀取效能;代價是 INSERT/UPDATE 額外負擔。OLAP 適合,OLTP 慎用。SCHEMA_BINDING、SET Options 等嚴格限制仍限制普及。READ_COMMITTED_SNAPSHOT (陳述式級) 適合高並發讀寫共存;ALLOW_SNAPSHOT_ISOLATION (交易級) 需應用配合重試邏輯,否則用戶頻遇更新衝突。| 特性 | 優勢 | 注意 |
|---|---|---|
| Ranking 函數 (ROW_NUMBER, RANK, DENSE_RANK, NTILE) | 解決序號生成、分頁、Top-N per group 難題;ORDER BY 內建比 Oracle 更直觀 | ROW_NUMBER() OVER (ORDER BY a) 外層再 ORDER BY b 會雙重排序,建議鍵值建叢集索引消除排序成本 |
| TOP 參數化 | TOP (@n) 避免動態 SQL 拼接 | |
| APPLY (CROSS/OUTER) | 優雅處理表值函數、遞迴樹狀遍歷 | |
| CTE (Common Table Expressions) | 遞迴查詢、邏輯模組化、可讀性大增 | 非物化,複雜 CTE 可能重複執行,需觀察執行計畫 |
| TRY...CATCH | 結構化錯誤處理,取代 @@ERROR 檢查,比 Oracle PL/SQL 更現代 | |
| PIVOT / UNPIVOT | 行列轉換語法化 | 預設第三欄當 GROUP BY 易誤導新手,CASE 寫法更直觀彈性 |
sys.dm_exec_* 系列提供即時效能洞察,但顆粒度仍有提升空間。osql/isql,適合無 GUI 環境自動化。SQL Server 2005 以 .NET 整合、大型資料類型、分區、快照隔離、現代化 T-SQL 確立企業級地位。掌握其優勢與陷阱,能在遷移、新專案中做出最佳架構決策。