SQL SERVER 2005表分割槽功能

iSQlServer發表於2009-04-23

為什麼要分配表:

為了改善大型表的可伸縮性和可管理性。

當在多個表或伺服器上分割資料時,因為需掃描的資料較少,所以只訪問一部分資料的查詢執行得較快。如果表位於不同的伺服器或一臺多處理器的計算機上,同樣可以對查詢所涉及的表進行同時掃描,從而改進查詢的效能。此外,象索引重建或表備份這樣的維護任務可更快地執行。

分割槽帶來幫助:

當表和索引變得非常大時,分割槽可以將數分為更小,更容易管理的部分,從而提供一定的幫助。

如果具有多個CPU的系統中存在一個大型表,則對該表的分割槽可以通過並行操作獲得更好的效能。

SQL SERVER 2000中的分割槽檢視:

SQL server 2000中,資料修改語句可以受益於檢視功能,由於修改語句可以使用相同的分割槽檢視結構,因此,SQL SERVER 可以通過檢視將修改定向至相應的基礎表。

允許在多個伺服器之間分佈這些檢視,並直接通過檢視更新資料庫表。

SQL SERVER 2000 中的分割槽檢視:

SQL SERVER 2000區分本地檢視和分散式檢視。在本地分割槽檢視中,所有的參與表和檢視駐留在同一SQL SERVER例項上。在分散式分割槽檢視中,至少有一個參與表駐留在不同的(遠端)伺服器上。

建立基本步驟:

1、 在實現分割槽檢視之前,必須先水平分割槽表。原始表初分成若干個較小的成員表。每個成員表包含與原始表相同數量的列。

2、 成員表設計好後,每個表基於鍵值的範圍儲存原始表的一塊水平區域。鍵值範圍基於分割槽列中的資料值,每一成員中的值範圍通過分割槽列上的CHECK約束強制,並且範圍之間不能重疊。

3、 在建立成員表後,在伺服器上定義一個分割槽檢視。

建立事例:

//ServerA

Use pubs

go

Create table customers (

 Customerid varchar(5) not null,

 CompanyName varchar(50) not null,

 ContactName varchar(30) null,

 

CONSTRAINT PK_customers PRIMARY KEY CLUSTERED (Customerid),

CONSTRAINT   CK_customerid   CHECK (Customerid between 'AAAAA' and 'LZZZZ')

)

 

//Server B

use pubs

go

Create table customers (

 Customerid varchar(5) not null,

 CompanyName varchar(50) not null,

 ContactName varchar(30) null,

CONSTRAINT PK_customers PRIMARY KEY CLUSTERED (Customerid),

CONSTRAINT   CK_customerid   CHECK (Customerid between 'M' and 'ZZZZZ')

)

go

//ServerA

exec sp_addlinkedserver   

       @server='DPVSERVER1', @srvproduct='',

       @provider='SQLOLEDB', @datasrc='ServerB'

go

exec sp_addlinkedsrvlogin

 @rmtsrvname = 'DPVSERVER1'

     , @useself = 'false'

     , @rmtuser = 'sa'

     , @rmtpassword = 'password'

go

//ServerB

exec sp_addlinkedserver   

       @server='DPVSERVER2', @srvproduct='',

       @provider='SQLOLEDB', @datasrc='ServerA'

exec sp_addlinkedsrvlogin

 @rmtsrvname = 'DPVSERVER2'

     , @useself =  'false'

     , @rmtuser = 'sa'

     , @rmtpassword = 'password'

go

//ServerA

Exec sp_serveroption 'DPVSERVER1', 'lazy schema validation', 'true'

//Sever B

Exec sp_serveroption 'DPVSERVER2', 'lazy schema validation', 'true'

 

 

//Server A

 Create view DPV_Customers As

   Select * from Customers

   Union all

   Select * from DPVSERVER1.Pubs.dbo.Customers

//Server B

   Create view DPV_Customers As

   Select * from DPVSERVER2.Pubs.dbo.Customers

   UNION ALL

   Select * from Customers

 

 

set xact_abort on

INSERT INTO DPV_CUSTOMERS VALUES('AAMAY','FUZHOU COMPANY','MARRY')

INSERT INTO DPV_CUSTOMERS VALUES('CJOHN','XIMEN COMPANY','MARRY')

INSERT INTO DPV_CUSTOMERS VALUES('SMITH','SHANGHAI COMPANY','TOM')

INSERT INTO DPV_CUSTOMERS VALUES('YOUNG','FUJIAN COMPANY','JANE')

INSERT INTO DPV_CUSTOMERS VALUES('GTOPP','BEJING COMPANY','TOM')

INSERT INTO DPV_CUSTOMERS VALUES('QUILH','BEJING COMPANY','TOM')

 

 

//SELECT * FROM DPV_Customers order by customerid

 

//SELECT * FROM DPV_Customers WHERE CustomerID= 'QUILH'

 

 

 

Sql SERVER 2005的分割槽功能增強:

Sql server 2000中並沒有簡化分割槽管理、設計。而且分割槽數目增加,查詢優化時間上升。

SQL SERVER 2005中的分割槽表:

SQL 2005提供了在資料庫中的檔案組之間表分割槽的功能,水平分割槽允許氫表按分割槽scheme分為多個小的組。表分割槽用於非常大的,從幾百GBTB甚至更大的資料庫。

通過SQL 2005中的分割槽表,可以對錶進行設計(使用函式和架構),從而將具有相同分割槽鍵的所有行都直接放置到(且總是轉到)特定的位置。函式用於定義分割槽邊界以及放第一個值的分割槽。在使用LEFT分割槽函式時,第一個值將作為第一個分割槽中的上邊界,在使用RIGHT分割槽函式時,第一個值將作為第二個分割槽的下邊界,定義函式後即可建立分割槽架構,分割槽架構可以將物件對映到一個或多個檔案組。為了確定資料的相應物理位置,分割槽架構將使用了分割槽函式。根據表分割槽架構建立表。

alter database adventureWorks add filegroup [fg1]

go

alter database adventureWorks add filegroup [fg2]

go

alter database adventureWorks add filegroup [fg3]

go

alter database adventureWorks

add file

(name='fg1',

 filename='c:"fg1.ndf',

size=5mb)

to filegroup [fg1]

go

alter database adventureWorks

add file

(name='fg2',

 filename='d:"fg2.ndf',

size=5mb)

to filegroup [fg2]

go

alter database adventureWorks

add file

(name='fg3',

 filename='e:"fg3.ndf',

size=5mb)

to filegroup [fg3]

go

use adventureWorks

go

Create partition function emailPF(nvarchar(50)) as range right for

 

values ('G','N')--建立分割槽函式,A-F"G-N"M-Z

go

Create partition scheme emailPS as partition emailPF to (fg1,fg2,fg3)--

 

建立分割槽架構

go

Create table customermail (custid int, email nvarchar(50)) on emailPS

 

(email)--建立分割槽表

go

 

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

相關文章