溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SQL Server分區(qū)表的介紹是怎樣的

發(fā)布時間:2021-10-12 14:52:23 來源:億速云 閱讀:112 作者:柒染 欄目:大數(shù)據(jù)

這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)SQL Server分區(qū)表的介紹是怎樣的,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

前言

 如果你的數(shù)據(jù)庫中某一個表中的數(shù)據(jù)滿足以下幾個條件,那么你就要考慮創(chuàng)建分區(qū)表了。

  • 數(shù)據(jù)庫中某個表中的數(shù)據(jù)很多。很多是什么概念?一萬條?兩萬條?還是十萬條、一百萬條?這個,我覺得是仁者見仁、智者見智的問題。當然數(shù)據(jù)表中的數(shù)據(jù)多到查詢時明顯感覺到數(shù)據(jù)很慢了,那么,你就可以考慮使用分區(qū)表了。如果非要我說一個數(shù)值的話,我認為是100萬條。

  • 但是,數(shù)據(jù)多了并不是創(chuàng)建分區(qū)表的惟一條件,哪怕你有一千萬條記錄,但是這一千萬條記錄都是常用的記錄,那么最好也不要使用分區(qū)表,說不定會得不償失。只有你的數(shù)據(jù)是分段的數(shù)據(jù),那么才要考慮到是否需要使用分區(qū)表。

  • 什么叫數(shù)據(jù)是分段的?這個說法雖然很不專業(yè),但很好理解。比如說,你的數(shù)據(jù)是以年為分隔的,對于今年的數(shù)據(jù)而言,你常進行的操作是添加、修改、刪除和查詢,而對于往年的數(shù)據(jù)而言,你幾乎不需要操作,或者你的操作往往只限于查詢,那么恭喜你,你可以使用分區(qū)表。換名話說,你對數(shù)據(jù)的操作往往只涉及到一部分數(shù)據(jù)而不是所有數(shù)據(jù)的話,那么你就可以考慮什么分區(qū)表了。

分區(qū)表介紹

分區(qū)表就是將一個大表分成若干個小表。假設(shè),你有一個銷售記錄表,記錄著每個每個商場的銷售情況,那么你就可以把這個銷售記錄表按時間分成幾個小表,例如說5個小表吧。2009年以前的記錄使用一個表,2010年的記錄使用一個表,2011年的記錄使用一個表,2012年的記錄使用一個表,2012年以后的記錄使用一個表。那么,你想查詢哪個年份的記錄,就可以去相對應(yīng)的表里查詢,由于每個表中的記錄數(shù)少了,查詢起來時間自然也會減少。

但將一個大表分成幾個小表的處理方式,會給程序員增加編程上的難度。以添加記錄為例,以上5個表是獨立的5個表,在不同時間添加記錄的時候,程序員要使用不同的SQL語句,例如在2011年添加記錄時,程序員要將記錄添加到2011年那個表里;在2012年添加記錄時,程序員要將記錄添加到2012年的那個表里。這樣,程序員的工作量會增加,出錯的可能性也會增加。 

使用分區(qū)表就可以很好的解決以上問題。分區(qū)表可以從物理上將一個大表分成幾個小表,但是從邏輯上來看,還是一個大表。

接著上面的例子,分區(qū)表可以將一個銷售記錄表分成五個物理上的小表,但是對于程序員而言,他所面對的依然是一個大表,無論是2010年添加記錄還是2012年添加記錄,對于程序員而言是不需要考慮的,他只要將記錄插入到銷售記錄表——這個邏輯中的大表里就行了。SQL Server會自動地將它放在它應(yīng)該呆在的那個物理上的小表里。

同樣,對于查詢而言,程序員也只需要設(shè)置好查詢條件,OK,SQL Server會自動將去相應(yīng)的表里查詢,不用管太多事了。

分區(qū)表的創(chuàng)建

第一、創(chuàng)建分區(qū)表的第一步,先創(chuàng)建數(shù)據(jù)庫文件組,但這一步可以省略,因為你可以直接使用PRIMARY文件。但我個人認為,為了方便管理,還是可以先創(chuàng)建幾個文件組,這樣可以將不同的小表放在不同的文件組里,既便于理解又可以提高運行速度。創(chuàng)建文件組的方法很簡單,打開SQL Server Management Studio,找到分區(qū)表所在數(shù)據(jù)庫,右鍵單擊,在彈出的菜單里選擇“屬性”。然后選擇“文件組”選項,再單擊下面的“添加”按鈕。


第二,創(chuàng)建了文件組之后,還要再創(chuàng)建幾個數(shù)據(jù)庫文件。為什么要創(chuàng)建數(shù)據(jù)庫文件,這很好理解,因為分區(qū)的小表必須要放在硬盤上,而放在硬盤上的什么地方呢?當然是文件里啦。再說了,文件組中沒有文件,文件組還要來有啥用呢?還是在上圖的那個界面,選擇“文件”選項,然后添加幾個文件。在添加文件的時候要注意以下幾點:

    1、不要忘記將不同的文件放在文件組中。當然一個文件組中也可以包含多個不同的文件。

    2、如果可以的話,將不同的文件放在不同的硬盤分區(qū)里,最好是放在不同的獨立硬盤里。要知道IQ的速度往往是影響SQL Server運行速度的重要條件之一。將不同的文件放在不同的硬盤上,可以加快SQL Server的運行速度。

    在本例中,為了方便起見,將所有數(shù)據(jù)庫文件都放在了同一個硬盤下,并且每個文件組中只有一個文件。


第三、創(chuàng)建一個分區(qū)函數(shù)。這一步是必須的了,創(chuàng)建分區(qū)函數(shù)的目的是告訴SQL Server以什么方式對分區(qū)表進行分區(qū)。這一步必須要什么SQL腳本來完成。以上面的例子,我們要將銷售表按時間分成5個小表。假設(shè)劃分的時間為:

    第1個小表:2018-1-1以前的數(shù)據(jù)(不包含2018-1-1)。

    第2個小表:2018-1-1(包含2018-1-1)到2018-12-31之間的數(shù)據(jù)。

    第3個小表:2019-1-1(包含2019-1-1)到2020-12-31之間的數(shù)據(jù)。

    第4個小表:2020-1-1(包含2020-1-1)到2021-12-31之間的數(shù)據(jù)。

    第5個小表:2021-1-1(包含2021-1-1)之后的數(shù)據(jù)。

那么分區(qū)函數(shù)的代碼如下所示:

CREATE PARTITION FUNCTION partfunSale (datetime)  

AS RANGE RIGHT FOR VALUES ('20180101','20190101','20200101','20210101') 

其中:

    1、CREATE PARTITION FUNCTION意思是創(chuàng)建一個分區(qū)函數(shù)。

    2、partfunSale為分區(qū)函數(shù)名稱。

    3、AS RANGE RIGHT為設(shè)置分區(qū)范圍的方式為Right,也就是右置方式。

    4、FOR VALUES ('20180101','20190101','20200101','20210101')為按這幾個值來分區(qū)。

    這里需要說明的一下,在Values中,'20180101'、'20190101'、'20200101'、'20210101',這些都是分區(qū)的條件?!?nbsp;20180101”代表2018年1月1日,在小于這個值的記錄,都會分成一個小表中,如表1;而小于或等于'20180101'并且小于'20190101'的值,會放在另一個表中,如表2。以此類推,到最后,所有大小或等于'20210101'的值會放在另一個表中,如表5。

    也許有人會問,為什么值“ 20190101”會放在表2中,而不是表1中呢?這是由AS RANGE RIGHT中的RIGHT所決定的,RIGHT的意思是將等于這個值的數(shù)據(jù)放在右邊的那個表里,也就是表2中。如果您的SQL語句中使用的是Left而不是RIGHT,那么就會放在左邊的表中,也就是表1中。


第四、創(chuàng)建一個分區(qū)方案。分區(qū)方案的作用是將分區(qū)函數(shù)生成的分區(qū)映射到文件組中去。分區(qū)函數(shù)的作用是告訴SQL Server,如何將數(shù)據(jù)進行分區(qū),而分區(qū)方案的作用則是告訴SQL Server將已分區(qū)的數(shù)據(jù)放在哪個文件組中。分區(qū)方案的代碼如下所示:

CREATE PARTITION SCHEME partschSale  

AS PARTITION partfunSale  

TO (  

    Sale2009,  

    Sale2010,  

    Sale2011,  

    Sale2012,  

    Sale2013)  

其中:

    1、CREATE PARTITION SCHEME意思是創(chuàng)建一個分區(qū)方案。

    2、partschSale為分區(qū)方案名稱。

    3、AS PARTITION partfunSale說明該分區(qū)方案所使用的數(shù)據(jù)劃分條件(也就是所使用的分區(qū)函數(shù))為partfunSale。

    4、TO后面的內(nèi)容是指partfunSale分區(qū)函數(shù)劃分出來的數(shù)據(jù)對應(yīng)存放的文件組。

到此為止,分區(qū)函數(shù)和分區(qū)方案就創(chuàng)建完畢了。


最后,創(chuàng)建分區(qū)表,創(chuàng)建方式和創(chuàng)建普遍表類似,如下所示:

CREATE TABLE Sale(  

    [Id] [int] IDENTITY(1,1) NOT NULL,  

    [Name] [varchar](16) NOT NULL,  

    [SaleTime][datetime] NOT NULL  

) ON partschSale([SaleTime])  

其中:

    1、CREATE TABLE 意思是創(chuàng)建一個數(shù)據(jù)表。

    2、Sale為數(shù)據(jù)表名。

    3、()中為表中的字段,這里的內(nèi)容和創(chuàng)建普通數(shù)據(jù)表沒有什么區(qū)別,惟一需要注意的是不能再創(chuàng)建聚集索引了。道理很簡單,聚集索引可以將記錄在物理上順序存儲的,而分區(qū)表是將數(shù)據(jù)分別存儲在不同的表中,這兩個概念是沖突的,所以,在創(chuàng)建分區(qū)表的時候就不能再創(chuàng)建聚集索引了。

    4、ON partschSale()說明使用名為partschSale的分區(qū)方案。

    5、partschSale()括號中為用于分區(qū)條件的字段是SaleTime。

    OK,一個物理上是分離的,邏輯上是一體的分區(qū)表就創(chuàng)建完畢了。查看該表的屬性,可以看到該表已經(jīng)屬于分區(qū)表了。

上述就是小編為大家分享的SQL Server分區(qū)表的介紹是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI