SQL Server2005 表分割槽三步曲 zz

2022-02-10 15:25:16 字數 4599 閱讀 2817

前言

sql server 2005

開始支援表分割槽,這種技術允許所有的表分割槽都儲存在同一臺伺服器上。每乙個表分割槽都和在某個檔案 組

(filegroup)

中的單個檔案關聯。同樣的乙個檔案

/檔案組可以容納多個分割槽表。 在這種設計架構下,資料庫引擎能夠判定查詢過程中應該訪問哪個分割槽,而不用掃瞄整個表。如果查詢需要的資料行分散在多個分割槽中,

sql server

使用多個處理器對多個分割槽進 行並行查詢。你可以為在建立表的時候就定義分割槽的索引。

對小索引的搜尋或者掃瞄要比掃瞄整個表或者一張大表上的索引要快很多。因此,當對大表進行查詢,表 分割槽可以產生相當大的效能提公升

通過分別檢 查同一條返回所有行的、簡單

select

語句在分割槽表和非分割槽表上的執行計畫,返回的資料範圍通過

where

語句來指定。同一條語句在這 兩個不同的表上有不同的執行計畫。對於分割槽表的查詢顯示出乙個巢狀的迴圈和索引的掃瞄。從本質上來說,

sql server

將兩個分割槽視為獨立的表,因 此使用乙個巢狀迴圈將它們連線起來。對非分割槽的表的同乙個查詢則使用索引掃瞄來返回同樣的列。當你使用同樣的分割槽策略建立多個表,同時在查詢中連線這些 表,那麼效能上的提公升會更加明顯

分割槽請三思

1.雖然分割槽可以帶來眾多的好 處,但是同進也增加了實現物件的管理費用和複雜性。因此在進行分割槽之前要首先仔細的考慮以確定是否應為物件進行分割槽。

2.在確定了為物件進行分割槽後, 下一步就要確定分割槽鍵和分割槽數。要確定分割槽資料,應先評估您的資料中是否存在邏輯分組和模式。

3.確定是否應使用多個檔案分 組。為了有助於優化效能和維護,應使用檔案組分離資料。檔案組是資料庫資料檔案的邏輯組合,它可以對資料檔案進行管理和分配,以便提高資料庫檔案的併發訪 問效率。

分割槽三步曲

sql server

資料庫表分割槽操作過程由三個步驟組成:

建立分割槽函式

建立分割槽架構

對錶進行分割槽

():建立乙個分割槽函式(邏輯結構)

此分割槽函式用於定義你希望

sql server

如何對資料進行分割槽的引數值

(how)

。這個操作並不涉及任何**, 只是單純的定義了一項技術來分割資料。

--刪除表

ifobject_id

('tb_partition1'

)isnot

null

drop

table

goif

object_id

('tb_partition2'

)isnot

null

drop

table

go--

刪除架構

ifexists(

select

from

sys.partition_schemes

where

name

='my_psch'

)drop

partition

scheme

go--

刪除分割槽函式

ifexists(

select

from

sys.partition_functions

where

name

='my_pfun'

)drop

partition

function

--建立分割槽函式

create

partition

function

datetime)as

range

left

forvalues

('2007-12-31')注意

:這 裡呼叫的

"range right"

語句表明每個分割槽邊界值是右 界。類似的,如果使用

"range left"語句,

則上述第乙個分割槽應該包括所有值小於或等於

'2004-01-01'資料,

以此類推

.():建立乙個分割槽架構(物理結構)

一旦給出描述如何分割資料的 分割槽函式,接著就要建立乙個分割槽架構,用來定義分割槽位置

(where)

。建立過程非常直截了當,只要將分割槽連線到指定的檔案組就行了。

--建立分割槽架構

gocreate

partition

scheme

aspartitionto(

[primary],[primary])

/* 1

,建立分割槽函式,分割槽方案是有先後順序的。

2, 分割槽函式提供的值的數目

n,不能超過

999。所建立的分割槽數等於

n + 1 */注意:

這 裡將乙個分割槽函式連線到了該分割槽架構,但並沒有將分割槽架構連線到任何資料表。這就是可復用性起作用的地方了。無論有多少資料庫表

,我們都可以使用該分割槽架構

(或僅僅是分割槽函式)。

():對乙個表進行分割槽

定義好乙個分割槽架構後,就可 以著手建立乙個分割槽表了。只需要在表建立指令中新增乙個

"on"

語句,用來指定分割槽架構以及應 用該架構的表列。因為分割槽架構已經識別了分割槽函式,所以不需要再指定分割槽函式了。

create

table (

intidentity

,datetime

,[name]as

'name'

+ltrim

(id),

constraint

primary

keyclustered

(id,dt)on)

ongo

create

table

(int

identity

,datetime

,[name]as

'name'

+ltrim

(id),

constraint

primary

keyclustered

(id,dt)on)

on--

為此表填充數

declare

datetime

set'2007-01-01'

while

'2009-10-01'

begin

insert

select

setdateadd

(dd,1,@dt)

end--

查詢表的分割槽狀況

select

*from

sys.partitions

where

object_idin(

select

object_id

from

sys.tables

where

name

in('tb_partition1'

,'tb_partition2'

))--

現在我們可以看一下我們剛才插入的行都分布在哪個

select

*,$partition

.my_pfun(dt)

from

--切換分割槽

--切換前

select

*from

select

*from

----

切換分割槽

tb_partition1-->tb_partition2

alter

table

partition

topartition

goselect

*from

select

from

修改三步曲

新增乙個檔案組到資料庫(可選

修改分割槽

修 改分割槽函式

--新增乙個檔案組到資料庫

--修改分割槽

scheme

--把大於

/12/31

的分割槽改分為

2個分割槽

--3修改分 區函式

alter

partition

function

alter

partition

scheme

next

gosplit

range

('2008/12/31')go

--把小於

2008/12/31

的兩分割槽合併

alter

partition

function

merge

range

('2007/12/31'

)

SQL Server 2005 修改表結構

為表新增具有預設值的一列 if not exists select from syscolumns where name website and objectproperty id,isusertable 1 and object name id tbbrowser begin alter tabl...

sql server2005取得表描述

select fldname a.name,priname case when columnproperty a.id,a.name,isidentity 1 then else end,idname case when exists select 1 from sysobjects where x...

SqlServer2005分頁方案

插入測試資料200w條,可能會很久 create table student id int primary keyidentity 1 1 name nvarchar 50 age int insert student name,age values name 18 while select cou...