Sql Server 2005 实现Oracle 10g的range--list/range等组合分区功能
2008-09-08 16:32
591 查看
Sql Server 2005有分区功能,但Oracle已经有了组合分区功能,sql server 2005如何实现,能实现吗?
在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个。可以实现多种类型的分区功能,具体大家可以自己下去研究
在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个。可以实现多种类型的分区功能,具体大家可以自己下去研究
相关文章推荐
- Sql Server 2005 实现Oracle 10g 的hash表分区功能
- Sql Server 2005 实现Oracle 10g 的hash表分区功能
- [转]SQL SERVER 函数组合实现oracle的LPAD函数功能
- SQL SERVER 函数组合实现oracle的LPAD函数功能
- SQL SERVER 函数组合实现oracle的LPAD函数功能
- Oracle 10g 与 SQL Server 2005 的数据类型
- Oracle 10g迁移到Sql Server 2005
- 在SQL Server 2005中可伸缩性方面提供了表分区功能
- Sql Server 2005 Express数据库导入导出功能的实现
- SQL Server 2005 镜像功能实现
- SQL Server 2005 Express 数据库导入到 oracle 10g的方法
- SQL Server 2005 镜像功能实现 - 转 -已验证
- SQL Server 2005导入Oracle 10g的C#源码
- 在SQL Server 2005中用存储过程实现搜索功能
- 在SQL Server 2005中用存储过程实现搜索功能
- 在SQL Server 2005中用存储过程实现搜索功能(转)
- 创建range-list(范围-列表)组合分区!
- 在SQL Server 2005中用存储过程实现搜索功能
- SQL Server 2005:查看分区表(partition table)的分区范围(partition range)
- Sql Server 2005 Express数据库导入导出功能的实现