天天看點

關于SQLSERVER表分區的介紹(轉)

分區函數和分區方案的建立和使用方法

具體設計過程如下:

(1)首先建立一個名為partionTest的資料庫。然後分别為資料庫partionTest添加四個檔案組,檔案組名依次為FileGroup001~FileGroup004,

然後為該資料庫添加四個資料檔案,分别命名為File001~File004,并将它們依次儲存到檔案組FileGroup001~FileGroup004中。

(2)以資料庫partionTest為例,右擊資料庫partionTest,從其快捷菜單中選擇【屬性】指令,打開【資料庫屬性】對話框。選擇該對話框中的

【選擇頁】清單中的【檔案】選項,然後單擊選項頁的【添加】按鈕,為該資料庫添加一個檔案,将檔案的邏輯名命名為File001,然後單擊【檔案組】

列中的下拉清單,打卡【partionTest的建立檔案組】對話框,在【名稱】文本框中輸入需要命名的檔案組名稱,本示例使用FileGroup001,

如下圖所示:

關于SQLSERVER表分區的介紹(轉)

(3)按照上面介紹的方法建立剩餘的3個檔案及檔案組,最終效果如下圖所示:

關于SQLSERVER表分區的介紹(轉)

注意:預設情況下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,如下圖所示:

關于SQLSERVER表分區的介紹(轉)

(6)繼續在【查詢編輯器】視窗中輸入下面的T-SQL腳本:

關于SQLSERVER表分區的介紹(轉)
1 USE partionTest
2 
3 GO
4 
5 CREATE PARTITION SCHEME PartionByIntScheme
6 
7 AS PARTITION PartionByInt
8 
9 TO(FileGroup001,FileGroup002,FileGroup003,FileGroup004);      
關于SQLSERVER表分區的介紹(轉)

上述T-SQL腳本将建立一個名為PartionByIntScheme的分區方案。建立該方案時,通過AS PARTITION指定了用于建立分區方案的分區函數(即前面建立的分區函數PartionByInt)。

同時,通過關鍵詞TO将建立的分區與檔案組FileGroup001~FileGroup004相綁定。單擊【執行】按鈕,建立該分區方案。

(7)切換到【對象資料總管】下,展開資料庫partionTest\【存儲】\【分區方案】節點,可以看到剛剛建立的分區方案PartionByIntScheme,如下圖所示:

關于SQLSERVER表分區的介紹(轉)

(8)接下來為了示範分區方案的使用方法,在此需要首先建立一個資料表,本示例建立一個名為testPartionTable的資料表。在【查詢編輯器】視窗中輸入下面的

T-SQL腳本:

關于SQLSERVER表分區的介紹(轉)
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);      
關于SQLSERVER表分區的介紹(轉)

(9)單擊【執行】按鈕,建立名為testPartionTable的資料表。需要注意的是,在這裡建立資料表時,使用了關鍵詞ON來指定需要使用的分區方案,并将字段ID指定為

分區的依據字段,即根據ID值将資料分别儲存于不同的檔案(即分區)中。下面使用上面建立的分區方案,向資料表testPartionTable插入資料。在【查詢編輯器】

視窗中輸入下面的T-SQL腳本:

關于SQLSERVER表分區的介紹(轉)
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      
關于SQLSERVER表分區的介紹(轉)

(10)上述T-SQL腳本用于向資料表testPartionTable中輸入5組資料,這些資料将被自動地插入到4個不同的檔案(即4個不同的分區)File001~File004中。單擊【執行】按鈕,

運作上述T-SQL腳本,結果如下圖:

關于SQLSERVER表分區的介紹(轉)

(11)如果想要查詢指定分區中包含的資料(例如檢視第3分區中所包含的記錄),可以使用如下T-SQL腳本:

關于SQLSERVER表分區的介紹(轉)
1 USE partionTest
2 GO
3 
4 select  * from  testPartionTable 
5 where $PARTITION.PartionByInt(ID)=3
6 GO      
關于SQLSERVER表分區的介紹(轉)

(12)其中系統函數$PARTITION,用于為指定的分區函數傳回分區号,例如$PARTITION.PartionByInt(ID)用于傳回給ID所處的分區号。單擊【執行】按鈕

所得查詢結果如下圖所示:

關于SQLSERVER表分區的介紹(轉)

 建立一個空的分區

alter partition scheme PartionByInt next used File005

alter partition function PartionByInt ()

   split range(400)

 将資料轉移到建立的分區

--switch  data

alter table  temptable

  switch to testPartionTable Partition $partition.PartionByInt(400)

删除分區

--先轉移資料

alter table testPartionTable switch Partition $partition.PartionByInt(400) to temptable

--合并分區  

alter partition function PartionByInt()

  merge range(400)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21634320/viewspace-751652/,如需轉載,請注明出處,否則将追究法律責任。

轉載于:http://blog.itpub.net/21634320/viewspace-751652/