你是否在千方百計優化sql server 資料庫的效能?如果你的資料庫中含有大量的**,把這些**分割槽放入獨立的檔案組可能會讓你受益匪淺。sql server 2005引入的表分割槽技術,讓使用者能夠把資料分散存放到不同的物理磁碟中,提高這些磁碟的並行處理效能以優化查詢效能。
sql server資料庫表分割槽操作過程由三個步驟組成:
1. 建立分割槽函式
2. 建立分割槽架構
3. 對錶進行分割槽
下面將對每個步驟進行詳細介紹。
比如,在c盤下建立如下幾個目錄
c:/data2/primary
c:/data2/fg1
c:/data2/fg2
c:/data2/fg3
c:/data2/fg4
其中primary存放的是主資料庫檔案,其他fg1--fg4存放四個單獨的檔案組,可以見創立資料庫
data partition db2,如下
use [master]
go/****** object: database [data partition db] script date: 10/08/2006 23:09:53 ******/
if exists (select name from sys.databases where name = n'data partition db2')
drop database [data partition db2]
gocreate database [data partition db2]
on primary
(name='data partition db primary fg',
filename=
'c:/data2/primary/data partition db primary fg.mdf',
size=5,
maxsize=500,
filegrowth=1 ),
filegroup [data partition db fg1]
(name = 'data partition db fg1',
filename =
'c:/data2/fg1/data partition db fg1.ndf',
size = 5mb,
maxsize=500,
filegrowth=1 ),
filegroup [data partition db fg2]
(name = 'data partition db fg2',
filename =
'c:/data2/fg2/data partition db fg2.ndf',
size = 5mb,
maxsize=500,
filegrowth=1 ),
filegroup [data partition db fg3]
(name = 'data partition db fg3',
filename =
'c:/data2/fg3/data partition db fg3.ndf',
size = 5mb,
maxsize=500,
filegrowth=1 ),
filegroup [data partition db fg4]
(name = 'data partition db fg4',
filename =
'c:/data2/fg4/data partition db fg4.ndf',
size = 5mb,
maxsize=500,
filegrowth=1 )
步驟一:建立乙個分割槽函式
此分割槽函式用於定義你希望sql server如何對資料進行分割槽的引數值([u]how[/u])。這個操作並不涉及任何**,只是單純的定義了一項技術來分割資料。
我們可以通過指定每個分割槽的邊界條件來定義分割槽。例如,假定我們有乙份customers表,其中包含了關於所有客戶的資訊,以一一對應的客戶編號(從1到1,000,000)來區分。我們將通過以下的分割槽函式把這個表分為四個大小相同的分割槽:
create partition function [data partition range](int)
as range left for values (100,200,300)
這些邊界值定義了四個分割槽。第乙個分割槽包括所有值小於100的資料,第二個分割槽包括值在100-200之間的資料。第三個分割槽包括值在200-300之間的資料。所有值大於或等於300的資料被歸入第四個分割槽。
請注意,呼叫"range right"語句表明每個分割槽邊界值是右界。類似的,使用"range left"語句,則第乙個分割槽應該包括所有值小於或等於100的資料,第二個分割槽的資料值在100-200之間,以此類推。
步驟二:建立乙個分割槽架構
一旦給出描述如何分割資料的分割槽函式,接著就要建立乙個分割槽架構,用來定義分割槽位置([u]where[/u])。建立過程非常直截了當,只要將分割槽連線到指定的檔案組就行了。例如,如果有四個檔案組,組名從"fg1"到"fg4",那麼以下的分割槽架構就能達到想要的效果:
use [data partition db2]
gocreate partition scheme [data partition scheme]
as partition [data partition range]
to ([data partition db fg1], [data partition db fg2], [data partition db fg3],[data partition db fg4]);
注意,這裡將乙個分割槽函式連線到了該分割槽架構,但並沒有將分割槽架構連線到任何資料表。這就是可復用性起作用的地方了。無論有多少資料庫表,我們都可以使用該分割槽架構(或僅僅是分割槽函式)。
步驟三:對乙個表進行分割槽
定義好乙個分割槽架構後,就可以著手建立乙個分割槽表了。這是整個分割槽操作過程中最簡單的乙個步驟。只需要在表建立指令中新增乙個"on"語句,用來指定分割槽架構以及應用該架構的表列。因為分割槽架構已經識別了分割槽函式,所以不需要再指定分割槽函式了。
例如,使用以上的分割槽架構建立乙個客戶表,可以呼叫以下的transact-sql指令:
create table mytable
(id int not null, date datetime, cost money)
on [data partition scheme] (id);
這裡注意,on [data partition scheme] (id);表明,劃分時以id的大小作為劃分的根據,on後要跟分割槽架購的名稱
最後,我們可以填充資料了
use [data partition db2]
godeclare @count int
set @count =-25
while @count <=100
begin
insert into mytable select @count,getdate(),100.00
set @count=@count+1
endset @count =101
while @count <=200
begin
insert into mytable select @count,getdate(),200.00
set @count=@count+1
endset @count =201
while @count <=300
begin
insert into mytable select @count,getdate(),300.00
set @count=@count+1
endset @count =301
while @count <=400
begin
insert into mytable select @count,getdate(),400.00
set @count=@count+1
endset @count =401
while @count <=800
begin
insert into mytable select @count,getdate(),500.00
set @count=@count+1
end最後,我們可以查詢下,插入的這些資料,是否真的被劃分到四個不同的檔案組裡的表分割槽了,可以這樣看
select *, $partition.[data partition range](id)
from mytable
SQL Server表分割槽
建立分割槽表start 分割槽函式 create partition function partfunbfq datetime as range right for values 20110101 20120101 20130101 20140101 20150101 分割槽方案 create pa...
Sqlserver表分割槽
use testsplitdb 先建立好資料庫 1.建立檔案組 alter database testsplitdb add filegroup testsplitgroup1 alter database testsplitdb add filegroup testsplitgroup2 alte...
SQL Server表分割槽
第一步,建立檔案組 1 右擊資料庫 屬性 檔案組 2 t sql alter database 資料庫名稱 add filegroup 檔案組名 例項 alter database bussystem add filegroup testgroup1 第二步,建立資料檔案到檔案組 1 右擊資料庫 屬...