在Oracle 10g中,有rang-list/hash分区,在SQL server 2005中可以实现Range和list,可以和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]
这里分区视图:实现了typeid为1的范围分区。对于程序员来说,前台表是透明的为[zping.com]
利用这种方式分区:可以灵活使用分区列,分区列不在是2个,可以是3个。可以实现多种类型的分区功能,具体大家可以自己下去研究