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

smartcoffee 2009-07-30 01:14:32
最近研究sqlserver 2005分区表。有个问题想请教 。目前sqlserver2005中,建立的唯一索引必须包含分区列。而我需要在订单号列上建立一个唯一索引。我当前使用订单日期作为分区列,如果将这两个列一起建立唯一索引,达不到订单号唯一性。因为我需要在数据库层保证系统写入的订单号必须唯一。如果分区表不能解决这个问题,还是只能用一个大表来存在数据。
...全文
362 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
  • 打赏
  • 举报
回复
沙发?
changefilter.sql oracle的连接数查看和连接用户的查看.sql Sun30新建oracle用户.sql user_job.sql xaview.sql 修改分区索引.SQL 修改数据库核心字符集.txt 僵死进程查询.sql 创建ORACLE表空间.sql 回滚段等待.SQL 在数据库中建JOB.sql 外连接.SQL 外部例程.SQL 建6节点回滚段.SQL 建回滚段.SQL 建立一个与现存数据库相同但不含数据的空库.sql 扩展超过100M查询.sql 整理表空间碎片.sql 新建表.sql 显示数据文件信息.sql 查插入表的性能.sql 查看session正在执行什么SQL.sql 查看session正在等待何种系统资源.sql 查看哪些session正在使用哪些回滚段.sql 查看某个进程正在执行什么SQL语句.sql 查看用户表所占空间的大小.sql 查看系统SGA区状态.sql 查看系统中使用了哪些设备文件.sql 查看系统中每个表空间的使用情况.sql 查看系统中每个表空间的大小.sql 查看系统联接数.sql 查看系统锁.sql 查看表空间使用情况.sql 查看进程占用回滚段的情况.sql 查看那些数据库对象被修改过.sql 用oupput的ora过程.sql 用户命令查询.sql 用户进程查询.sql 监控数据库性能的SQL.sql 看user_job.sql 索引表清除sql生成.sql 索引表空间使用情况查询.sql 索引表空间整理.sql 统计.sql 获取数据库版本信息.sql 表空间使用情况.txt 表空间使用查询.sql 表空间剩余空间查看.sql 表空间回收.sql 过滤表清除sql生成.sql 进程使用回滚段查询.sql 锁表查询.sql

27,582

社区成员

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

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