關於SQLSERVER表分區的介紹(二)
分區函數和分區方案的創建和使用方法
具體設計過程如下:
(1)首先創建一個名為partionTest的數據庫。然后分別為數據庫partionTest添加四個文件組,文件組名依次為FileGroup001~FileGroup004,
然后為該數據庫添加四個數據文件,分別命名為File001~File004,並將它們依次保存到文件組FileGroup001~FileGroup004中。
(2)以數據庫partionTest為例,右擊數據庫partionTest,從其快捷菜單中選擇【屬性】命令,打開【數據庫屬性】對話框。選擇該對話框中的
【選擇頁】列表中的【文件】選項,然后單擊選項頁的【添加】按鈕,為該數據庫添加一個文件,將文件的邏輯名命名為File001,然后單擊【文件組】
列中的下拉列表,打卡【partionTest的新建文件組】對話框,在【名稱】文本框中輸入需要命名的文件組名稱,本示例使用FileGroup001,
如下圖所示:
(3)按照上面介紹的方法創建剩余的3個文件及文件組,最終效果如下圖所示:
注意:默認情況下SQLSERVER2005將使用於邏輯名稱相同的名稱作為數據庫的物理主文件名。因此,如果使用一個統一的文件夾來保存數據庫文件,
就需要注意為不同數據庫的數據文件設定不同的邏輯名稱。
(4)做好上述准備工作后,接下來就可以開始創建分區方案和分區函數了。首先創建一個分區函數,所謂分區函數,就是一種用於規定如何將數據划分到不同分區的
規則函數。在【查詢編輯器】窗口中輸入下面T-SQL腳本:
1 USE partionTest 2 GO 3 CREATE PARTITION FUNCTION PartionByInt(int) 4 AS RANGE LEFT FOR VALUES(100,200,300) 5 GO
上述T-SQL腳本設置相應的分區划分規則,其中設置了3個數值類型的分區點,分別為100、200、300,並通過關鍵詞LEFT指明了由3個分區點划分的4段分區,
即(-∞,100)、[101,200]、[201,300]和[301,∞],如果使用關鍵詞RIGHT,分區將變化為[100,199]、[200,299]、[300,399]和[400,499]。單擊【執行】
按鈕,創建名為PartionByInt的分區函數。
(5)切換到【對象資源管理器】中,展開數據庫partionTest\【存儲】\【分區函數】節點,可以看到剛剛創建的分區函數PartionByInt,如下圖所示:
(6)繼續在【查詢編輯器】窗口中輸入下面的T-SQL腳本:
1 USE partionTest 2 3 GO 4 5 CREATE PARTITION SCHEME PartionByIntScheme 6 7 AS PARTITION PartionByInt 8 9 TO(FileGroup001,FileGroup002,FileGroup003,FileGroup004);
上述T-SQL腳本將創建一個名為PartionByIntScheme的分區方案。創建該方案時,通過AS PARTITION指定了用於創建分區方案的分區函數(即前面創建的分區函數PartionByInt)。
同時,通過關鍵詞TO將創建的分區與文件組FileGroup001~FileGroup004相綁定。單擊【執行】按鈕,創建該分區方案。
(7)切換到【對象資源管理器】下,展開數據庫partionTest\【存儲】\【分區方案】節點,可以看到剛剛創建的分區方案PartionByIntScheme,如下圖所示:
(8)接下來為了演示分區方案的使用方法,在此需要首先創建一個數據表,本示例創建一個名為testPartionTable的數據表。在【查詢編輯器】窗口中輸入下面的
T-SQL腳本:
1 USE partionTest 2 GO 3 CREATE TABLE testPartionTable 4 (ID INT NOT NULL, 5 ItemNo CHAR(20), 6 ItemName CHAR(40) 7 )ON PartionByIntScheme(ID);
(9)單擊【執行】按鈕,創建名為testPartionTable的數據表。需要注意的是,在這里創建數據表時,使用了關鍵詞ON來指定需要使用的分區方案,並將字段ID指定為
分區的依據字段,即根據ID值將數據分別保存於不同的文件(即分區)中。下面使用上面創建的分區方案,向數據表testPartionTable插入數據。在【查詢編輯器】
窗口中輸入下面的T-SQL腳本:
1 USE partionTest 2 GO 3 4 declare @count int 5 set @count=-25 6 while @count<=100 7 begin 8 insert into testPartionTable select 9 @count,'ITEM'+convert(varchar(6),@count),'>0 and <100' 10 set @count=@count+1 11 end 12 13 set @count=101 14 while @count<=200 15 begin 16 insert into testPartionTable select 17 @count,'ITEM'+convert(varchar(6),@count),'>100 and <200' 18 set @count=@count+1 19 end 20 21 set @count=201 22 while @count<=300 23 begin 24 insert into testPartionTable select 25 @count,'ITEM'+convert(varchar(6),@count),'>200 and <300' 26 set @count=@count+1 27 end 28 29 set @count=301 30 while @count<=400 31 begin 32 insert into testPartionTable select 33 @count,'ITEM'+convert(varchar(6),@count),'>300 and <400' 34 set @count=@count+1 35 end 36 set @count=401 37 while @count<=500 38 begin 39 insert into testPartionTable select 40 @count,'ITEM'+convert(varchar(6),@count),'>400 and <500' 41 set @count=@count+1 42 end 43 44 select * from testPartionTable 45 GO
(10)上述T-SQL腳本用於向數據表testPartionTable中輸入5組數據,這些數據將被自動地插入到4個不同的文件(即4個不同的分區)File001~File004中。單擊【執行】按鈕,
運行上述T-SQL腳本,結果如下圖:
(11)如果想要查詢指定分區中包含的數據(例如查看第3分區中所包含的記錄),可以使用如下T-SQL腳本:
1 USE partionTest 2 GO 3 4 select * from testPartionTable 5 where $PARTITION.PartionByInt(ID)=3 6 GO
(12)其中系統函數$PARTITION,用於為指定的分區函數返回分區號,例如$PARTITION.PartionByInt(ID)用於返回給ID所處的分區號。單擊【執行】按鈕
所得查詢結果如下圖所示:
SQLSERVER的表分區介紹文章就到這里了,寫得不好的地方歡迎大家拍磚!!