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 @   zping  阅读(2150)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示