sqlserver 分割槽表

2021-04-23 18:05:42 字數 4508 閱讀 5779

--1 建分割槽函式,用於自動劃分物理表資料的流向(建好後可以在databases/[dbname]/storage中看到)

/* 下面分成四個區域=bigscreen且=computer且=pooltable

若是right,則x1 < bigscreen <= x2 < computer <= x3 < pooltable <= x4

若是left, 則x1 <= bigscreen < x2 <= computer < x3 <= pooltable < x4

*/create

partition 

function

[pf_product_partition](

varchar(10

)) as

range 

right

forvalues(n'

bigscreen

', n

'computer

', n

'pooltable')

--2 建分割槽方案,用於與上面的function關聯(建好後可以在storage中看到)

--概念上的schema可以與物理檔案組關聯,這樣可以獲得更加效率,具體可以參考http://www.agilelabs.cn/blogs/woody/archive/2006/08/24/1574.aspx

create

partition scheme 

[ps_product_scheme]as

partition

[pf_product_partition

]allto(

[primary])

--3 建表,把需要分割槽的字段關聯到分割槽方案schema上

create

table

[saleshistoryarchive

](           

[saleid][

int]

identity(1

,1),           

[product][

varchar](

10) 

null

,                 

[saledate][

datetime

]null

,                 

[saleprice][

money

]null)on

[ps_product_scheme

](product) 

go--建立分割槽索引

--create index partition_index on saleshistoryarchive(product) on [ps_product_scheme](product)

--4 建立演示資料

declare

@ismallint

set@i=1

while(@i

<=

10000

)begin

insert

into

saleshistoryarchive(product, saledate, saleprice)                       

values('

computer', 

dateadd

(mm, 

@i, 

'3/11/1919

'), 

datepart

(ms, 

getdate

()) +(

@i+57))     

insert

into

saleshistoryarchive(product, saledate, saleprice)           

values('

bigscreen', 

dateadd

(mm, 

@i, 

'3/11/1927

'), 

datepart

(ms, 

getdate

()) +(

@i+13))                 

insert

into

saleshistoryarchive(product, saledate, saleprice)               

values('

pooltable', 

dateadd

(mm, 

@i, 

'3/11/1908

'), 

datepart

(ms, 

getdate

()) +(

@i+29))                        

set@i=@i

+1end--

其它測試資料

insert

into

saleshistoryarchive(product, saledate, saleprice)                       

values('

aomputer', 

dateadd

(mm, 1, 

'3/11/1919

'), 

datepart

(ms, 

getdate

()) +(

1+57)) 

--其它測試資料

insert

into

saleshistoryarchive(product, saledate, saleprice)                       

values('

bia'

, dateadd

(mm, 1, 

'3/11/1919

'), 

datepart

(ms, 

getdate

()) +(

2+57)) 

--其它測試資料

insert

into

saleshistoryarchive(product, saledate, saleprice)                       

values('

zomputer', 

dateadd

(mm, 2, 

'3/11/1919

'), 

datepart

(ms, 

getdate

()) +(

3+57)) 

--5 可以看到每條資料在第幾個分割槽中(根據上述情況,共有四個分割槽)

select

$partition.

[pf_product_partition

](product), 

*from

saleshistoryarchive

--6 看看每個分割槽的記錄數

select

*from

sys.partitions

where

object_name

(object_id) =

'saleshistoryarchive

'--7 轉移把錶saleshistoryarchive分割槽2中的資料轉移到bak中,也可以轉移到指定的分割槽2中

--好處,速度太快了,你可以對這組資料進行查詢或刪除

select

*into

saleshistoryarchivebak 

from

saleshistoryarchive 

where1=

2alter

table

saleshistoryarchive switch partition 2to

saleshistoryarchivebak 

--alter table saleshistoryarchive switch partition 4 to saleshistoryarchivebak partition 4

--8 效能對比,請參考

--9 刪除

drop

table

saleshistoryarchive

godrop

table

saleshistoryarchivebak

godrop

partition scheme ps_product_scheme

godrop

partition 

function

pf_product_partition

go

sqlserver 分割槽表

當資料庫表中資料量能夠被 到將會非常大,或者已經擁有龐大的資料時,我們應該選擇分表或者分割槽 即使用多個資料庫 來解決資料訪問時的效能問題。為什麼要分區分表呢?因為分區分表有如下幾個有點 1.改善查詢效能,對分割槽物件的查詢可以僅搜尋自己關係的分割槽,提高檢索速度。2.增強可用性,如果表的某個分割槽...

Sqlserver分割槽表

1.分割槽表簡介 分割槽表在邏輯上是乙個表,而物理上是多個表。從使用者角度來看,分割槽表和普通表是一樣的。使用分割槽表的主要目的是為改善大型表以及具有多個訪問模式的表的可伸縮性和可管理性。分割槽表是把資料按設定的標準劃分成區域儲存在不同的檔案組中,使用分割槽可以快速而有效管理和訪問資料子集。1.1 ...

SQL Server 分割槽表

分割槽表就是在物理上將乙個大表分成若干個小表,但是在邏輯上還是乙個表 如果你的資料庫中某乙個表中的資料滿足以下幾個條件,那麼你就要考慮建立分割槽表了。1 資料庫中某個表中的資料很多。很多是什麼概念?一萬條?兩萬條?還是十萬條 一百萬條?這個,我覺得是仁者見仁 智者見智的問題。當然資料表中的資料多到查...