時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)
一、SQLServer與Analysis Services排序規(guī)則的差異。
通常情況下數(shù)據(jù)庫管理員可以分別為數(shù)據(jù)庫引擎和Analysis Services分別設置排序規(guī)則。如在SQLServer2008服務器中,數(shù)據(jù)庫引擎支持兩組排序規(guī)則,分別為Windows排序規(guī)則與SQLServer服務器排序規(guī)則。默認情況下,如果在英文環(huán)境下部署SQLServre數(shù)據(jù)庫服務器的話,則其采用的是SQLServer排序規(guī)則。而如果采用其他版本的數(shù)據(jù)庫系統(tǒng),如在中文環(huán)境下部署中文版本的數(shù)據(jù)庫系統(tǒng),則這個排序規(guī)則就采用的是Windows排序規(guī)則,即由數(shù)據(jù)庫服務器操作系統(tǒng)的區(qū)域設置來決定具體的排序規(guī)則。而對于Analysis Services服務來說,其支持一組排序規(guī)則,即Windows排序規(guī)則。雖然說,數(shù)據(jù)庫管理員在數(shù)據(jù)庫安裝過程中,可以為這兩個服務器配置不同的排序規(guī)則。如SQLServer采用SQLServer排序規(guī)則,而Analysis Services采用Windows排序規(guī)則。這在技術上是允許的。但是這會造成一些不利的后果。由于兩者的排序規(guī)則不同,那么最后顯示的結果很有可能因為排序規(guī)則的不同,而導致顯示內(nèi)容的不同。為此在規(guī)劃數(shù)據(jù)庫應用的時候,如果需要同時安裝這個兩個應用服務,那么筆者的建議是在安裝SQLServer數(shù)據(jù)庫時,為這個兩個服務設置相同的排序規(guī)則。由于Analysis Services只支持Windows排序規(guī)則,為此兩者都需要同時采用Windows排序規(guī)則。以確保數(shù)據(jù)庫引擎與Analysis Services之間顯示結果的一致性。
需要強調(diào)的是,這是一個柔性的規(guī)則。即即使同時部署這兩個應用服務,而他們采用不同的排序規(guī)則,在技術上來說是不會遇到問題的。主要是看用戶能否接受兩個服務顯示結構的不一致。如果可以接受的話,那么就不需要遵守這個規(guī)則,可以從性能或者其他方面來綜合考慮所采用的排序規(guī)則。但是如果不可以接受的話,那么就需要嚴格遵守這一規(guī)則,即為兩個服務都配置Windows排序規(guī)則。
二、決定排序規(guī)則的一些參考。
在符合上面這個基本的原則后,數(shù)據(jù)庫管理員就需要結合用戶的需求與數(shù)據(jù)庫性能方面的要求,來綜合考慮,最后決定需要采用的排序規(guī)則。這具有一定的難度,不過下面的這些規(guī)則數(shù)據(jù)庫管理員可以拿來參考。
參考規(guī)則一:能用二進制排序規(guī)則最好使用二進制排序規(guī)則。
二進制排序規(guī)則由于其處理簡單,為此如果采用二進制排序規(guī)則的話,可以在很大程度上提升數(shù)據(jù)庫的性能。特別是如果數(shù)據(jù)庫中本身就是以二進制的形式來存儲數(shù)據(jù),那么在利用二進制規(guī)則來排序的時候,相對來說,要比其他的排序規(guī)則速度更加的快。而且其也不怎么會受到語言的影響。所以,在數(shù)據(jù)庫部署中,能夠使用二進制排序規(guī)則,就盡量使用二進制排序規(guī)則。或者說,這是數(shù)據(jù)庫管理員首選的選擇。除非這個二進制排序規(guī)則與用戶的需求相矛盾,或者跟其他需求有難以調(diào)和的沖突時,才采用其他的排序規(guī)則。特別是對于數(shù)據(jù)庫性能有比較高的要求時,這個二進制是一個首要的選擇。
但是并不是說在任何情況下采用二進制都會起到不錯的效果。如在數(shù)據(jù)庫中,既有二進制存儲的數(shù)據(jù),又有其他格式存儲的數(shù)據(jù)。如字符型的數(shù)據(jù),在SQLServer數(shù)據(jù)庫中分為nchar(二進制格式的數(shù)據(jù))與char(ANSI格式的字符數(shù)據(jù))兩種。如果采用二進制排序規(guī)則,對這兩種不同類型的數(shù)據(jù)采用的是不同的處理規(guī)則。為此即使兩張表中的記錄完全相同,但是其采用的字符格式不同,其最后的結果也有可能會不同。所以在遇到這種情況時,數(shù)據(jù)庫管理員要么想方設法統(tǒng)一字符集,以達到統(tǒng)一排序結果的目的。要么數(shù)據(jù)庫管理員就需要向用戶確認,是否允許這個不同排序結果的存在。如果允許的話,那么采用二進制排序規(guī)則沒有問題。但是如果不允許的話,那么之能夠放棄采用二進制排序規(guī)則,而需要采用SQLServer等其他的排序規(guī)則。
參考規(guī)則二:適合采用Windows排序規(guī)則的情況。
一般滿足以上三個條件的任何一個條件的情況下,適合采用Windows排序規(guī)則。
一是文章一開頭提到的那個基本原則。即在數(shù)據(jù)庫部署中同時存在Analysis Services與數(shù)據(jù)庫引擎(數(shù)據(jù)庫引擎是必須的,而Analysis Services是可選的),同時又不允許他們排序結果不一致的情況存在。此時最好能夠采用Windows排序規(guī)則。原因很簡單,因為Analysis Services只支持Windows排序規(guī)則,為了確保排序結果的一致性,也需要將數(shù)據(jù)庫引擎的排序結果設置為Windows排序規(guī)則。
二是在數(shù)據(jù)庫中同時存在nchar/nvarchar(二進制格式的數(shù)據(jù))與char/varchar(ANSI格式的數(shù)據(jù))的情況下,而且在應用程序中可能需要混合使用他們。在這種情況下最好采用Windwos排序規(guī)則,以便在各個數(shù)據(jù)類型之間進行一致的比較。如果采用二進制排序規(guī)則或者SQLServer排序規(guī)則,由于他們對這些不同的數(shù)據(jù)類型比較時會采用不同的機制,為此往往會有不同的排序結果。在遇到這種混合使用的情況,最好采用的是Windows排序規(guī)則,以統(tǒng)一最后的排序結果。
三是在應用程序中只使用char/varchar數(shù)據(jù)類型,并且在應用程序的SQL語句中,很少使用Like操作符號時,可以考慮采用Windows排序規(guī)則。此時可以在最大程度上消除排序結果的不同。
在考慮是否需要采用Windows排序規(guī)則的時候,只需要對以上的三條規(guī)則對號入座即可。如果可以對號入座的,那么就采用這個Windows排序規(guī)則。如果不能夠?qū)μ柸胱模蔷涂紤]采用其他的排序規(guī)則。
參考規(guī)則三:適合采用SQLServer排序規(guī)則的情況。
在什么情況下比較適用SQLServer排序規(guī)則呢?或許這個問題回答起來,婆說婆有理,公說公有理。很難有一個統(tǒng)一的答案。筆者認為,采用SQLServer排序規(guī)則,即有利,也有弊。數(shù)據(jù)庫管理員需要在這個利與弊之間旬的一個均衡點,以平衡各方面的需求。
之所以考慮采用SQLServer排序規(guī)則,筆者認為最大的好處就是可以提高LIKE等操作符的執(zhí)行性能。也就是說,如果在查詢語句中使用了Like等類似的關鍵字,而且同時使用了Order BY排序子句時,如果采用SQLServer排序規(guī)則的話,那么性能會比其他排序規(guī)則要高。而且滿足條件的記錄越多,這個排序效果會越好。所以,在數(shù)據(jù)庫設計中需要用到比較多的Like操作符,而且數(shù)據(jù)庫管理員又需要提升數(shù)據(jù)庫性能的時候,那么就需要考慮是否需要采用這個SQLServer排序規(guī)則。注意如果在Where語句中使用了這個Like操作符,而且這個操作符所涉及到的字段設置了索引,其查詢效果并不會因為有了這個索引而提高多少。也就是說,Like等類似的操作符與索引之間的配合,并不能夠起到1+1大于2的效果,有時候甚至會起到反面效果。此時,如果更改這個排序規(guī)則,反而可以起到索引不能夠起到的效果。
不過采用SQLServer排序規(guī)則也有很多的缺陷。最大的缺陷就是數(shù)據(jù)庫的排序規(guī)則與操作系統(tǒng)或者其他應用程序的排序結果不一致。如現(xiàn)在數(shù)據(jù)庫中采用的是SQLServer排序規(guī)則,對某張表進行了排序。然后將這張表導入導了Excel表格中,并對其按相同的規(guī)則進行重新排序。此時兩張表記錄的顯示順序可能是不同的。這主要要是因為區(qū)域設置的不同而造成的。如果采用SQLServer排序規(guī)則的話,這種情況無法避免。除非企業(yè)中所有的電腦、數(shù)據(jù)庫系統(tǒng)都采用英文環(huán)境,并且配置相同的區(qū)域設置。為此,只有用戶可以允許數(shù)據(jù)庫系統(tǒng)與操作系統(tǒng)或者其他應用程序排序結果的不一致性的情況下,可以使用這個SQLServer排序規(guī)則?;蛘哒f,數(shù)據(jù)庫管理員不關系Windows排序規(guī)則中的語言比較語義的情況下,同時又存在不較多的Like操作符時,可以考慮采用SQLServer排序規(guī)則。
在以上的分析中可以看出,在考慮采用什么樣的排序規(guī)則時,主要考慮的是兩個方面的因素,一是排序的結果,二是服務器的性能。也就是說,用戶是選擇在數(shù)據(jù)庫服務器與其它應用程序之間排序結果的一致性,還是選擇提升服務器的性能。數(shù)據(jù)據(jù)管理員確認完這個問題之后,那么就可以做出符合用戶需求的判斷了。
關鍵詞標簽:SQL Server 2008,服務
相關閱讀
熱門文章
淺談JSP JDBC來連接SQL Server 2005的方法
SqlServer2005對現(xiàn)有數(shù)據(jù)進行分區(qū)具體步驟
sql server系統(tǒng)表損壞的解決方法
MS-SQL2005服務器登錄名、角色、數(shù)據(jù)庫用戶、角色、架構的關系
人氣排行 配置和注冊ODBC數(shù)據(jù)源-odbc數(shù)據(jù)源配置教程 如何遠程備份(還原)SQL2000數(shù)據(jù)庫 SQL2000數(shù)據(jù)庫遠程導入(導出)數(shù)據(jù) SQL2000和SQL2005數(shù)據(jù)庫服務端口查看或修改 修改Sql Server唯一約束教程 SQL Server 2005降級到2000的正確操作步驟 sql server系統(tǒng)表損壞的解決方法 淺談JSP JDBC來連接SQL Server 2005的方法