SQL Server2005 表分區(第一章)

第一章

1、什麼是分區

2、爲什麼要把表進行分區

3、怎麼把表進行分區

----------------------------------------華麗的分割線-----------------------------------------

1、什麼是分區

簡單的理解就是把一個數據庫表分成若干個小的數據庫表。

舉個例子:一個進貨表中有10條數據(主鍵ID自增長),我們可以按照個數進行分區,把ID 1-3的放一個表中,4-6的放一個表中,7-10的放一個表中;這樣,我們就相當於把這個進貨表分成了3個小表(即3個區)。當我們在通過ID進行查詢的時候,如查詢ID=5,這樣就會只查詢ID爲4-6所在的表,表中的數據量由原來的10個變成了現在的3個,數據量小了,查詢速度自然也就快了。

有人會說,我可以直接建立3張表(即進貨表a、進貨表b、進貨表c),也能達到上面的效果。

這就是我要說的把表進行分區和建立真實表的區別,如果按照上面所說,建立了3張進貨表,當我們在使用和查詢的時候就需要操作三張表,對於程序員來說是件很麻煩的事兒,而且極易出現錯誤。

用分區就完全解決了上面的問題,表面上我們把進貨表分成了3部分,但從邏輯上看他依然是一張表,對於程序員使用上來說就是一張表。

----------------------------------------華麗的分割線-----------------------------------------

2、爲什麼要把表進行分區


當數據量超大、且查詢起來很慢的時候,我們就要考慮優化了;把表進行分區就是優化的一種。通過對錶進行分區,可以大大的節省時間,當然也並不是所有的表進行分區之後都能達到優化的作用,反之還會使速度變慢,開銷變大。下面會舉例說明。

那麼,什麼樣的表適合分區呢?

1、數據量超級大,大到個人感覺查詢起來較慢的數據量。(沒有具體數字,個人感覺百萬級數據的表算是大的了)

2、一部分數據不經常使用,例如幾十年的歷史數據,在查詢的時候只需要查詢進一兩年的數據;即數據庫表中有經常不用的數據。(要是一直不用,建議對數據進行封存),要是這個表中的數據經常使用,即使有千萬或是過億的數據,也不要進行表分區,不然會更慢的。

3、表分區和一些索引是有衝突的,對於表來說,分區要是優於索引的話,可以進行分區。(下面會有具體例子證明)

----------------------------------------華麗的分割線-----------------------------------------

3、怎麼把表進行分區

①、創建分區函數

②、創建分區方案

③、創建數據庫表使用分區方案


①、創建分區函數

創建分區函數,是爲了告訴SQL Server我們以什麼樣的條件對錶進行分區的。

還是以上面進貨表(a表)爲例,把ID 1-3的放一個表中,4-6的放一個表中,7-10的放一個表中。代碼如下:

--創建分區函數(分成三個區,1區小於等於3的、2區大於3小於等於6的、3區大於6的)
CREATE PARTITION FUNCTION partfunA (int)  
AS RANGE LEFT FOR VALUES (3,6) 

註釋:

1、CREATE PARTITION FUNCTION partfunA(int) 是創建分區函數名爲partfunA的分區函數,分區的條件爲(int)型

2、AS RANGE LEFT FOR VALUES(3,6)是將表按照條件(1區小於等於3的、2區大於3小於等於6的、3區大於6的)分成3個區;LEFT或RIGHT是條件(即3和6),放在左/右邊的分區(這裏用LEFT,id爲3的數據就放在第一分區裏,id爲6的數據放在第二分區裏)

圖1

如圖1所示,創建後會在數據庫存儲下分區函數下出現 partfunA 分區函數


②、創建分區方案

創建分區方案,是將分區函數生成的分區映射到文件組中去。分區方案是爲了告訴SQL Server將已分區的數據放在哪個文件組中。代碼如下:

--創建分區方案(將已分區的數據放在主文件裏,三個區都放在主文件裏)
CREATE PARTITION SCHEME partschA 
AS PARTITION partfunA  
TO ([Primary],[Primary],[Primary])

註釋:

1、CREATE PARTITION SCHEME partschA是創建一個名爲partschA的分區方案。

2、AS PARTITION partfunA是使用partfunA分區函數。

3、TO ([Primary],[Primary],[Primary])把partfunA分區函數劃分出來的數據存放在文件組中(這裏都存放在主數據文件中)

圖2


如圖2所示,創建後會在數據庫存儲下分區方案下出現 partschA 分區方案


③、創建數據庫表使用分區方案

創建數據庫表,並且使用分區方案。代碼如下:

--創建數據庫表a,並使用分區方案partschA
if object_id('[a]') is not null drop table [a]
go 
create table [a]
(
[ID] int,
[品名] varchar(6),
[入庫數量] int,
[入庫時間] datetime
) on partschA(ID)

註釋:

1、on partschA(ID)對a表使用partschA分區方案

右鍵點擊表a屬性-常規,如下圖:


圖3

如圖3所示,創建的表a已經進行了分區。













發佈了50 篇原創文章 · 獲贊 7 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章