ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SQL SERVER 2005表分区功能

SQL SERVER 2005表分区功能

原创 Linux操作系统 作者:iSQlServer 时间:2009-04-23 16:27:48 0 删除 编辑

为什么要分配表:

为了改善大型表的可伸缩性和可管理性。

当在多个表或服务器上分割数据时,因为需扫描的数据较少,所以只访问一部分数据的查询运行得较快。如果表位于不同的服务器或一台多处理器的计算机上,同样可以对查询所涉及的表进行同时扫描,从而改进查询的性能。此外,象索引重建或表备份这样的维护任务可更快地执行。

分区带来帮助:

当表和索引变得非常大时,分区可以将数分为更小,更容易管理的部分,从而提供一定的帮助。

如果具有多个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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-10-17

  • 博文量
    1319
  • 访问量
    2084779