比較 SQL 定序和 Windows 定序

文章翻譯 文章翻譯
文章編號: 322112 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

在 Microsoft SQL Server 2000 和 Microsoft SQL Server 2005 中,「定序」可指定比較和排序字串的方式,以及非 Unicode 資料使用的字元集。SQL Server 2000 支援兩種定序:
  • SQL 定序
  • Windows 定序
如需每種定序的說明和如何決定要使用何種定序的概觀,請參閱《SQL Server 2000 線上叢書》的<選取定序>主題,或請參閱《SQL Server 2005 線上叢書》的<定序類型>主題。

本文將告訴您,當您安裝 SQL Server 2000 或 SQL Server 2005 時,可能影響您選擇 Windows 定序或 SQL 定序的其他考量。

其他相關資訊

定序語意

對於 Windows 定序,使用和 Unicode 資料相同的演算法,可以實作非 Unicode 資料的比較。Unicode 和非 Unicode 排序,二者都與 Windows 特定版本中的字串比較規則相容。這樣可維持 SQL Server 中資料類型的一致性。它也讓使用 CompareString Win32 API 函式的開發人員,可以使用該 SQL Server 使用的相同規則,來排序其應用程式中的字串。

在 SQL 定序中,SQL Server 會為非 Unicode 資料定義不同的比較語意。SQL Server 比較語意的基礎在於 SQL「排序順序」。有關 SQL 定序與排序順序的對應,請參閱《SQL Server 線上叢書》的<SQL 定序名稱>主題。

SQL 定序用於排序非 Unicode 資料的規則,和 Microsoft Windows 作業系統提供的任一排序常式不相容;不過,Unicode 資料的排序和特定版本的 Windows 排序規則相容。因為非 Unicode 和 Unicode 資料的比較規則不同,當您使用 SQL 定序時,根據基礎資料類型的不同,可能會發現相同字元有不同的比較結果。例如,如果您使用 SQL 定序 SQL_Latin1_General_CP1_CI_AS,則非 Unicode 字串 a-c 會排在字串 ab 之前,因為連字號 (-) 會當作獨立的字元排序,且排在 b 之前。不過,如果您將這些字串轉換成 Unicode 並執行相同的比較,Unicode 字串 N'a-c' 會被視為大於 N'ab',因為 Unicode 排序規則使用的「文字排序」會忽略連字號。

字串比較效能

Unicode 排序規則較非 Unicode SQL 排序順序的規則更為複雜。當 SQL Server 比較 Unicode 資料時,字元會被指定一個權數,以根據定序的地區設定進行動態修改。資料也會根據比較樣式設定 (例如寬度、腔調字或區分假名) 而進行修改。Unicode 排序常式支援更具智慧的排序方法,例如文字排序。

另外,因為常式必須處理 Unicode 資料,因此具有足夠彈性可處理數千個不同字元的排序與比較,而不像多數的 SQL Server 排序順序,最多只能處理的 255 個字元。基於這些因素,使用 Unicode 排序規則的原始字串比較工作,通常比那些使用非 Unicode SQL 排序順序的類似字串需要更多的時間和 CPU 循環。

對於 SQL Server 中資料類型和定序類型的可能組合,這所代表的意義為:
  • 如果您使用非 Unicode 資料類型 (charvarchartext) 排序和處理資料,並且使用 SQL 定序,則會以非 Unicode SQL 排序順序執行字串比較。
  • 如果您使用非 Unicode 資料類型 (charvarchartext) 排序和處理資料,並且使用 Windows 定序,則會以 Unicode 排序規則執行字串比較。這可能會導致某些極度依賴字串排序效能的作業,較以 SQL 定序執行的類似作業耗費更多的時間和 CPU。
  • 如果您使用 Unicode 資料類型 (ncharnvarcharntext),則 SQL 及 Windows 定序的排序方式都一樣,兩種都將使用 Unicode 排序規則。
一般而言,Windows 定序和 SQL 定序之間的效能差異度不大。會出現差異的情況是,如果工作負載和 CPU 有關,而不是由 I/O 或網路速度所限制,且此 CPU 多數的負擔是由 SQL Server 中執行之字串操作或比較的負荷所造成。應用程式可能產生效能差異的範例之一,就是當系統中的應用程式會將長字串傳送至 SQL Server 預存程序時。該預存程序之後會大量使用 Transact-SQL 字串操作函式 (例如 CHARINDEX 或 PATINDEX) 以剖析字串。如果工作負載是一維的,並且是透過執行此字串剖析預存程序來控制,則 SQL 定序和 Windows 定序間的效能差異可能會很明顯。不過,多數應用程式的設計並不會導致效能差異明顯的情況。

建議

  1. SQL 定序是為了能與舊版 SQL Server 回溯相容而提供的。Windows 定序為 SQL Server 中的 Unicode 及非 Unicode 文字提供一致的字串比較,也與 Windows 作業系統中的字串比較維持一致。基於這些因素,除非有回溯相容性的問題或需要 SQL 定序的特定效能問題,否則 Windows 定序是建議的方法。
  2. 如果只為了 SQL 定序的效能特性而考慮 SQL 定序,您必須清楚多數應用程式的效能,並不會因為定序變更而獲得明顯的改善。請確定您擁有獨立的查詢可顯示因為 SQL 定序而獲得的改善。當您識別受影響的查詢後,請考慮下列變更定序的替代方案。這兩種替代方案提供的效能改善,都可能比您將執行個體定序變更為 SQL 定序的效能改善還要大:
    1. 如果 Windows 定序的負荷可回溯至執行明確字串操作或剖析的 Transact-SQL 常式,且如果您使用的是非 Unicode 資料類型,您可能會想為作業指定較常執行且成本較高的 SQL 定序或二進位 Windows 定序。假設您使用 PATINDEX 函式判斷資料表中的文字資料行是否包含 x 字元。如果您針對該特定比較作業強制執行 SQL 定序,且其他資料庫和應用程式繼續使用 Windows 定序,就不需變更整個系統的定序:
      SELECT PATINDEX ('%x%', MemoFld COLLATE SQL_Latin1_General_Cp1_CI_AS) FROM ...
    2. 如果 Windows 定序的負荷可回溯至不使用複雜字串操作函式的查詢,則經過改善的索引或查詢設計,可能比變更為 SQL 定序提供更佳的效能。可透過選擇性搜尋適當索引來滿足的查詢,字串比較成本中的些微變更對其將不會有太大的影響。相反地,在必須執行資料表掃描和將特定值與數百萬個資料列作比較的查詢中,每個字串比較可能都會快速增加小量的負荷。如果您變更索引或查詢本身,以避免查詢計畫中的大型資料表或索引掃描,則您的查詢執行速度將比變更為 SQL 定序的速度更快。
注意 第三種定序是 SQL 定序的變化。第三種定序稱為「相容性定序」或「過時定序」。相容性定序是指一組排序和比較規則,在 SQL Server 2000 中沒有預先定義的定序名稱。例如,如果您針對 Unicode 和非 Unicode 資料使用不一致的區分大小寫設定來設定 SQL Server 7.0,則當您將 SQL Server 7.0 的這個執行個體升級至 SQL Server 2000 時,將擁有相容性定序。在本文稍早的說明中,關於 SQL 定序的資訊也適用於相容性定序。

如需有關相容性定序的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
270042 Description of SQL Server compatibility collations

屬性

文章編號: 322112 - 上次校閱: 2006年3月2日 - 版次: 8.3
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
關鍵字:?
kbhowto kbinfo KB322112
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com