Sql Server 2005 实现Oracle 10g的range--list/range等组合分区功能

 Sql Server 2005有分区功能,但Oracle已经有了组合分区功能,sql server 2005如何实现,能实现吗?

 

     Oracle 10g中,有rang-list/hash分区,在SQL server 2005中可以实现Rangelist,可以和oracle一样实现复合分区。

 

   在上一次优化中,客户使用的是SQL server 2005的标准版,由于标准版没有提供分区功能,后来使用了分区视图来实现分区功能。

 

 这给我实现Oracle 10g的复合分区功能,有了一个另类实现。我们可以通过分区视图-分区来实现复合分区功能。和Oracle一样,提供给前台的都是一个表,都是透明的

 

现在我们看具体实例:

分区函数

CREATE PARTITION FUNCTION [zping.com.PF](int) AS RANGE LEFT FOR VALUES (-100, 0, 100)

分区方案

CREATE PARTITION SCHEME [zping.com.Ps] AS PARTITION [zping.com.PF] TO ([PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY])

分区表1

CREATE TABLE [dbo].[zping.com1](

    [id] [varchar](32) NOT NULL,

    [typeid] int not null,--第一个分区列

    [secondTypeId] [int] NULL, --第二个分区列

    [name] varchar(10)

 CONSTRAINT [PK_zping.com1] PRIMARY KEY NONCLUSTERED

 (

    [id] ASC,

    [typeid] ASC

 )

) ON [zping.com.Ps] ([secondTypeId])

ALTER TABLE [dbo].[zping.com1] WITH

CHECK ADD CONSTRAINT [CK_zping.com1] CHECK (([typeid]>=(1)))

分区表2

CREATE TABLE [dbo].[zping.com2](

    [id] [varchar](32) NOT NULL,

    [typeid] int not null,--第一个分区列

    [secondTypeId] [int] NULL, --第二个分区列

    [name] varchar(10)

 CONSTRAINT [PK_zping.com2] PRIMARY KEY NONCLUSTERED

 (

    [id] ASC,

    [typeid] ASC

 )

) ON [zping.com.Ps] ([secondTypeId])

ALTER TABLE [dbo].[zping.com2] WITH

CHECK ADD CONSTRAINT [CK_zping.com2] CHECK (([typeid]<(1)))

 

建立分区视图

create view [zping.com]

as

select * from dbo.[zping.com1]

union all

select * from dbo.[zping.com2]

 这里分区视图:实现了typeid1的范围分区。对于程序员来说,前台表是透明的为[zping.com]

 

 利用这种方式分区:可以灵活使用分区列,分区列不在是2个,可以是3个。可以实现多种类型的分区功能,具体大家可以自己下去研究

posted @ 2008-09-08 16:32  zping  阅读(2144)  评论(0编辑  收藏  举报