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

SQL Server 2008 安裝精靈排序規則抉擇:引擎與 Analysis Services 一致性指南

     編輯:關於SqlServer

核心衝突:兩種引擎、兩套排序規則體系

  • 資料庫引擎:支援 **Windows 排序規則** (依 OS 區域) 與 **SQL Server 排序規則** (舊版相容,英文環境預設)。
  • Analysis Services (SSAS):僅支援 Windows 排序規則。
  • 若引擎用 SQL 排序、SSAS 用 Windows 排序 → **同資料排序結果可能不一致**,導致報表/鑽取/前端顯示差畆,使用者困惑。

鐵律:同時部署時,雙引擎必須統一採用 Windows 排序規則

這是**柔性規則**:技術上允許不同,但業務上若不可接受排序不一致,**必須強制統一**。若無 SSAS 或可接受差異,可依效能/相容性自由選擇。

三大參考規則決策矩陣

規則適用條件 (滿足任一)推薦排序規則核心理由
規則一:優先二進制無語言語意排序需求、追求極致效能、資料純二進位/ASCII二進制排序規則 (如 `Latin1_General_BIN2`)比較最簡單 (位元級)、最快、不受語言影響、索引效能最優
規則二:適用 Windows 排序1. 同時部署 SSAS 需一致性
2. 同時存在 `NCHAR/NVARCHAR` (Unicode) 與 `CHAR/VARCHAR` (ANSI) 混用
3. 僅用 `CHAR/VARCHAR` 且極少用 `LIKE`
Windows 排序規則 (如 `Chinese_Taiwan_Stroke_CI_AS`)統一 Unicode/ANSI 比較語意、SSAS 相容、跨應用 (Excel/OS) 排序一致
規則三:適用 SQL Server 排序大量 `LIKE` + `ORDER BY` 查詢、需提升此類查詢效能、可接受與 OS/Excel 排序不一致SQL Server 排序規則 (如 `SQL_Latin1_General_CP1_CI_AS`)對 LIKE 模式匹配優化顯著、大結果集排序加速、但犧牲跨環境一致性

深度解析:為什麼 SQL 排序加速 LIKE?

  • SQL 排序規則採用簡化比較邏輯,`LIKE` 模式匹配可直接利用索引順序 (在特定條件下),避免 Windows 排序的複雜語言權重計算 (如全形/半形、重音、文化特定規則)。
  • 但 `LIKE` 配合索引效果本身有限 (前置萬用字元 `%abc` 無法尋找),更改排序規則非萬靈丹,**索引設計、SARGable 改寫才是根本**。

決策流程圖 (文字版)

開始
├─ 是否部署 SSAS? → 是 → 必選 Windows 排序 → 結束
├─ 是否混用 Unicode/ANSI 欄位? → 是 → 必選 Windows 排序 → 結束
├─ 是否極度追求效能且無語言排序需求? → 是 → 選二進制 (BIN2) → 結束
├─ 是否大量 LIKE+ORDER BY 且接受跨環境不一致? → 是 → 可考慮 SQL 排序 → 結束
└─ 預設 → 選 Windows 排序 (對應 OS 區域,如 Chinese_Taiwan_Stroke_CI_AS)

實務建議

  1. **新專案預設選 `Latin1_General_100_CI_AS_SC` (Windows, 版本 100, 區分大小寫/重音, 補充字元支援)** 或對應地區 Windows 排序 (如 `Chinese_Taiwan_Stroke_CI_AS`)。
  2. **避免**舊版 `SQL_Latin1_General_CP1_CI_AS` (SQL 排序) 除非舊系統相容強制需求。
  3. **資料庫層級可覆蓋**:`CREATE DATABASE ... COLLATE ...`,但實例層級 `tempdb`/系統資料庫仍遵循安裝時選擇,跨庫臨時表聯結可能衝突。
  4. **安裝前規劃**:確認所有應用 (SSAS、報表、ETL、前端) 的排序預期,一次定案,事後修改實例排序需重建實例/遷移資料,代價極高。

總結

排序規則選擇是**架構級決策**,影響資料排序、比較、索引效能、跨系統一致性。遵循「SSAS 強制 Windows、混用字元集強制 Windows、極致效能選二進制、大量 LIKE 可考慮 SQL」四大原則,並在安裝精靈中審慎勾選。記得:`tempdb` 繼承實例排序,跨庫操作隱性依賴實例排序,不要留遺憾。

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