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