分割槽表就是在物理上將乙個大表分成若干個小表,但是在邏輯上還是乙個表
如果你的資料庫中某乙個表中的資料滿足以下幾個條件,那麼你就要考慮建立分割槽表了。
1、資料庫中某個表中的資料很多。很多是什麼概念?一萬條?兩萬條?還是十萬條、一百萬條?這個,我覺得是仁者見仁、智者見智的問題。當然資料表中的資料多到查詢時明顯感覺到資料很慢了,那麼,你就可以考慮使用分割槽表了。如果非要我說乙個數值的話,我認為是100萬條。
2、但是,資料多了並不是建立分割槽表的惟一條件,哪怕你有一千萬條記錄,但是這一千萬條記錄都是常用的記錄,那麼最好也不要使用分割槽表,說不定會得不償失。只有你的資料是分段的資料,那麼才要考慮到是否需要使用分割槽表。
3、什麼叫資料是分段的?這個說法雖然很不專業,但很好理解。比如說,你的資料是以年為分隔的,對於今年的資料而言,你常進行的操作是新增、修改、刪除和查詢,而對於往年的資料而言,你幾乎不需要操作,或者你的操作往往只限於查詢,那麼恭喜你,你可以使用分割槽表。換名話說,你對資料的操作往往只涉及到一部分資料而不是所有資料的話,那麼你就可以考慮什麼分割槽表了。
那麼,什麼是分割槽表呢?
簡單一點說,分割槽表就是將乙個大表分成若干個小表。假設,你有乙個銷售記錄表,記錄著每個每個商場的銷售情況,那麼你就可以把這個銷售記錄表按時間分成幾個小表,例如說5個小表吧。2023年以前的記錄使用乙個表,2023年的記錄使用乙個表,2023年的記錄使用乙個表,2023年的記錄使用乙個表,2023年以後的記錄使用乙個表。那麼,你想查詢哪個年份的記錄,就可以去相對應的表裡查詢,由於每個表中的記錄數少了,查詢起來時間自然也會減少。
但將乙個大表分成幾個小表的處理方式,會給程式設計師增加程式設計上的難度。以新增記錄為例,以上5個表是獨立的5個表,在不同時間新增記錄的時候,程式設計師要使用不同的sql語句,例如在2023年新增記錄時,程式設計師要將記錄新增到2023年那個表裡;在2023年新增記錄時,程式設計師要將記錄新增到2023年的那個表裡。這樣,程式設計師的工作量會增加,出錯的可能性也會增加。
使用分割槽表就可以很好的解決以上問題。分割槽表可以從物理上將乙個大表分成幾個小表,但是從邏輯上來看,還是乙個大表。
接著上面的例子,分割槽表可以將乙個銷售記錄表分成五個物理上的小表,但是對於程式設計師而言,他所面對的依然是乙個大表,無論是2023年新增記錄還是2023年新增記錄,對於程式設計師而言是不需要考慮的,他只要將記錄插入到銷售記錄表——這個邏輯中的大表裡就行了。sql server會自動地將它放在它應該呆在的那個物理上的小表裡。
同樣,對於查詢而言,程式設計師也只需要設定好查詢條件,ok,sql server會自動將去相應的表裡查詢,不用管太多事了。
這一切是不是很誘人?
的確,那麼我們就可以開始動手建立分割槽表了。
第一、建立分割槽表的第一步,先建立資料庫檔案組,但這一步可以省略,因為你可以直接使用primary檔案。但我個人認為,為了方便管理,還是可以先建立幾個檔案組,這樣可以將不同的小表放在不同的檔案組裡,既便於理解又可以提高執行速度。建立檔案組的方法很簡單,開啟sql server management studio,找到分割槽表所在資料庫,右鍵單擊,在彈出的選單裡選擇「屬性」。然後選擇「檔案組」選項,再單擊下面的「新增」按鈕,如下圖所示:
第二,建立了檔案組之後,還要再建立幾個資料庫檔案。為什麼要建立資料庫檔案,這很好理解,因為分割槽的小表必須要放在硬碟上,而放在硬碟上的什麼地方呢?當然是檔案裡啦。再說了,檔案組中沒有檔案,檔案組還要來有啥用呢?還是在上圖的那個介面,選擇「檔案」選項,然後新增幾個檔案。在新增檔案的時候要注意以下幾點:
1、不要忘記將不同的檔案放在檔案組中。當然乙個檔案組中也可以包含多個不同的檔案。
2、如果可以的話,將不同的檔案放在不同的硬碟分割槽裡,最好是放在不同的獨立硬碟裡。要知道iq的速度往往是影響sql server執行速度的重要條件之一。將不同的檔案放在不同的硬碟上,可以加快sql server的執行速度。
在本例中,為了方便起見,將所有資料庫檔案都放在了同乙個硬碟下,並且每個檔案組中只有乙個檔案。如下圖所示。
第三、建立乙個分割槽函式。這一步是必須的了,建立分割槽函式的目的是告訴sql server以什麼方式對分割槽表進行分割槽。這一步必須要什麼sql指令碼來完成。以上面的例子,我們要將銷售表按時間分成5個小表。假設劃分的時間為:
第1個小表:2010-1-1以前的資料(不包含2010-1-1)。
第2個小表:2010-1-1(包含2010-1-1)到2010-12-31之間的資料。
第3個小表:2011-1-1(包含2011-1-1)到2011-12-31之間的資料。
第4個小表:2012-1-1(包含2012-1-1)到2012-12-31之間的資料。
第5個小表:2013-1-1(包含2013-1-1)之後的資料。
那麼分割槽函式的**如下所示:
view plaincopy to clipboardprint?
create partition function partfunsale (datetime)
as range right for values ('20100101','20110101','20120101','20130101')
create partition function partfunsale (datetime)
as range right for values ('20100101','20110101','20120101','20130101')
其中:1、create partition function意思是建立乙個分割槽函式。
2、partfunsale為分割槽函式名稱。
3、as range right為設定分割槽範圍的方式為right,也就是右置方式。
4、for values ('20100101','20110101','20120101','20130101')為按這幾個值來分割槽。
這裡需要說明的一下,在values中,'20100101'、'20110101'、'20120101'、'20130101',這些都是分割槽的條件。「 20100101」代表2023年1月1日,在小於這個值的記錄,都會分成乙個小表中,如表1;而小於或等於'20100101'並且小於'20110101'的值,會放在另乙個表中,如表2。以此類推,到最後,所有大小或等於'20130101'的值會放在另乙個表中,如表5。
也許有人會問,為什麼值「 20100101」會放在表2中,而不是表1中呢?這是由as range right中的right所決定的,right的意思是將等於這個值的資料放在右邊的那個表裡,也就是表2中。如果您的sql語句中使用的是left而不是right,那麼就會放在左邊的表中,也就是表1中。
第四、建立乙個分割槽方案。分割槽方案的作用是將分割槽函式生成的分割槽對映到檔案組中去。分割槽函式的作用是告訴sql server,如何將資料進行分割槽,而分割槽方案的作用則是告訴sql server將已分割槽的資料放在哪個檔案組中。分割槽方案的**如下所示:
view plaincopy to clipboardprint?
create partition scheme partschsale
as partition partfunsale
to (
sale2009,
sale2010,
sale2011,
sale2012,
sale2013)
create partition scheme partschsale
as partition partfunsale
to (
sale2009,
sale2010,
sale2011,
sale2012,
sale2013)
其中:1、create partition scheme意思是建立乙個分割槽方案。
2、partschsale為分割槽方案名稱。
3、as partition partfunsale說明該分割槽方案所使用的資料劃分條件(也就是所使用的分割槽函式)為partfunsale。
4、to後面的內容是指partfunsale分割槽函式劃分出來的資料對應存放的檔案組。
到此為止,分割槽函式和分割槽方案就建立完畢了。建立後的分割槽函式和分割槽方案在資料庫的「儲存」中可以看到,如下圖所示:
最後,建立分割槽表,建立方式和建立普遍表類似,如下所示:
view plaincopy to clipboardprint?
create table sale(
[id] [int] identity(1,1) not null,
[name] [varchar](16) not null,
[saletime][datetime] not null
) on partschsale([saletime])
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 意思是建立乙個資料表。
2、sale為資料表名。
3、()中為表中的字段,這裡的內容和建立普通資料表沒有什麼區別,惟一需要注意的是不能再建立聚集索引了。道理很簡單,聚集索引可以將記錄在物理上順序儲存的,而分割槽表是將資料分別儲存在不同的表中,這兩個概念是衝突的,所以,在建立分割槽表的時候就不能再建立聚集索引了。
4、on partschsale()說明使用名為partschsale的分割槽方案。
5、partschsale()括號中為用於分割槽條件的字段是saletime。
ok,乙個物理上是分離的,邏輯上是一體的分割槽表就建立完畢了。檢視該錶的屬性,可以看到該錶已經屬於分割槽表了。
**:
sqlserver 分割槽表
1 建分割槽函式,用於自動劃分物理表資料的流向 建好後可以在databases dbname storage中看到 下面分成四個區域 bigscreen且 computer且 pooltable 若是right,則x1 bigscreen x2 computer x3 pooltable x4 若是...
sqlserver 分割槽表
當資料庫表中資料量能夠被 到將會非常大,或者已經擁有龐大的資料時,我們應該選擇分表或者分割槽 即使用多個資料庫 來解決資料訪問時的效能問題。為什麼要分區分表呢?因為分區分表有如下幾個有點 1.改善查詢效能,對分割槽物件的查詢可以僅搜尋自己關係的分割槽,提高檢索速度。2.增強可用性,如果表的某個分割槽...
Sqlserver分割槽表
1.分割槽表簡介 分割槽表在邏輯上是乙個表,而物理上是多個表。從使用者角度來看,分割槽表和普通表是一樣的。使用分割槽表的主要目的是為改善大型表以及具有多個訪問模式的表的可伸縮性和可管理性。分割槽表是把資料按設定的標準劃分成區域儲存在不同的檔案組中,使用分割槽可以快速而有效管理和訪問資料子集。1.1 ...