分区表中建唯一索引的疑问

smartcoffee 2009-07-30 01:14:32
最近研究sqlserver 2005分区表。有个问题想请教 。目前sqlserver2005中,建立的唯一索引必须包含分区列。而我需要在订单号列上建立一个唯一索引。我当前使用订单日期作为分区列,如果将这两个列一起建立唯一索引,达不到订单号唯一性。因为我需要在数据库层保证系统写入的订单号必须唯一。如果分区表不能解决这个问题,还是只能用一个大表来存在数据。
...全文
361 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
smartcoffee 2009-07-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yang_ 的回复:]
这个问题可以很简单解决,唯一所以的主要目的是约束,不建立到分区就可以了,例如

SQL codeCREATE PARTITIONFUNCTION[PF_TEST](int)AS RANGERIGHTFORVALUES (0,1000,2000)GOCREATE PARTITION SCHEME[PS_test]AS PARTITION[PF_test]TO ([PRIMARY],[PRIMARY],[PRIMARY],[PRIMARY])GOcreatetable tbtest (
idintnotnull
,PoNovarchar(20)notnull
,datavarchar(1000)
)-- 按ID分区ALTERTABLE[dbo].[tbtest]ADDCONSTRAINT[PK_tbtest]PRIMARYKEYCLUSTERED
([id]ASC
)ON[PS_test]([id])GO-- 唯一索引不建立到分区createUNIQUEindex UQ_teston tbtest(pono)ON[PRIMARY]GO

[/Quote]

这样也是可行的。不过用不到对齐模式。即无法使用滑动窗口。分区表与按月分表的目的差不多(先不讨论底层维护性等),使用分区表肯定需要将一定历史分区数据通过修改meta数据快速移出分区表。
如果索引是未对齐方式。这个估计得删除索引,滑动窗口,增加新区,再建立唯一索引。所以说,矛盾啊
zjybushiren88888 2009-07-30
  • 打赏
  • 举报
回复
深刻学习勒.
Yang_ 2009-07-30
  • 打赏
  • 举报
回复
这个问题可以很简单解决,唯一所以的主要目的是约束,不建立到分区就可以了,例如

CREATE PARTITION FUNCTION [PF_TEST](int) AS RANGE RIGHT FOR VALUES (0,1000,2000)
GO

CREATE PARTITION SCHEME [PS_test] AS PARTITION [PF_test] TO ( [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY])
GO


create table tbtest (
id int not null
,PoNo varchar(20) not null
,data varchar(1000)
)


-- 按ID分区
ALTER TABLE [dbo].[tbtest] ADD CONSTRAINT [PK_tbtest] PRIMARY KEY CLUSTERED
(
[id] ASC
) ON [PS_test]([id])
GO

-- 唯一索引不建立到分区
create UNIQUE index UQ_test on tbtest(pono) ON [PRIMARY]
GO

xiequan2 2009-07-30
  • 打赏
  • 举报
回复
对唯一索引(聚集或非聚集)进行分区时,必须从唯一索引键使用的分区依据列中选择分区依据列。

注意:
此限制将使 SQL Server 只调查单个分区,以确保表中不存在重复的新键值。



如果分区依据列不可能包含在唯一键中,则必须使用 DML 触发器,而不是强制实现唯一性。
kkk33181102 2009-07-30
  • 打赏
  • 举报
回复
sql 2009
Zoezs 2009-07-30
  • 打赏
  • 举报
回复
唯一索引在分区列?
那你这个分区表还有什么意义?
devilidea 2009-07-30
  • 打赏
  • 举报
回复
hejin1221 2009-07-30
  • 打赏
  • 举报
回复
也可以按照单据类型,分别建几个表咯
--小F-- 2009-07-30
  • 打赏
  • 举报
回复
数量不多的话就用单张大表好了
多的话可以考虑使用分区表
htl258_Tony 2009-07-30
  • 打赏
  • 举报
回复
可以考虑做触发器或使用单张大表。
超维电脑科技 2009-07-30
  • 打赏
  • 举报
回复
沙发?

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧