sql server 2005中,終於引入了表分割槽,就是說,當乙個表裡的資料很多時,可以將其分拆到
多個的表裡,大大提高了效能。下面舉例子說明之
比如,在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 )
接下來,我們建立分割槽表函式,這其實可以理解為乙個規則,說明如何以乙個規則來將乙個表來劃分,如下
use [data partition db2]
gocreate partition function [data partition range](int)
as range left for values (100,200,300)
其中分割槽函式的名稱是data partition range,後面的型別(int)表明接下來用來分割槽的那個欄位的型別是int型別,
而values (100,200,300)表明,將把表分為4個區了,是從負數到100,100-200,200-300,大於300。
接下來,我們要建立分割槽架構,即將分割槽函式應用到我們分好的四個檔案組裡面去
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]);
再建立表的結構gouse [data partition db2]
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 2005中的output子句
今天看了下sql server 2005中的output子句,以使您可以從修改語句 insert update delete 中將資料返回到表變數中。帶結果的 dml 的有用方案包括清除和存檔 訊息處理應用程式以及其他方案。這一新的 output 子句的語法為 output into table v...
With在sql server 2005中的用法
with在msdn中的講解,可以參考鏈結 1 2 建立錶值變數型別 3 4create type ty newareagoods as table 5 areaid int notnull,6 goodsid int notnull 7 8 9 創鍵返回今天 的資料 10 根據有 的地區獲取參 11...
sql server 2005中的output子句
今天看了下sql server 2005中的output子句,以使您可以從修改語句 insert update delete 中將資料返回到表變數中。帶結果的 dml 的有用方案包括清除和存檔 訊息處理應用程式以及其他方案。這一新的 output 子句的語法為 output into table v...