暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle PK/UK键如何使用部分索引

askTom 2018-09-07
1097

问题描述

LiveSQL链接: 链接到LiveSQL链接后不工作,但链接有效
https://livesql.oracle.com/apex/livesql/s/g78ij8jxinq4409pp8dbz3owo

大家好,
我们有一个BI解决方案 (Oracle 12c ODI11)。
我们有很多分区表 (每日和每月列表分区)。
每个表都有PK键 (包含分区键,索引本地)-典型的DATE_KEY PK_xx
每个表都有UK键 (包含分区键,索引本地)-典型的DATE_KEY SOURCE_ID SOURCESYS_ID列 (自然键)。

我们在表格中有3年的历史。索引大小对于旧的partititons,其中不需要活动约束 (PK和UK),我们希望使用部分索引功能。

但是... 我们不能 .... (在唯一键上不支持部分索引)

我会尝试将非唯一索引用于PK和UK wth部分索引... 并且无法正常工作...

在将数据加载到目标表中期间,我们需要PK和UK,但是在查询阶段,我们通常只使用1y数据,而不使用PK和UK。

你知道吗?

专家解答

问题是你不能有部分约束。唯一键适用于表中的所有行。

如文档所述:

Unique indexes cannot be partial indexes. This applies to indexes created with the CREATE UNIQUE INDEX statement and indexes that are implicitly created when you specify a unique constraint on one or more columns.

https://docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/CREATE-INDEX.html#GUID-1F89BBC0-825F-4215-AF71-7588E31D8BFE

如果您希望某些行而不是其他行的约束,则需要拆分为两个表。

但是...

这种约束有什么害处?您希望通过禁用旧分区上的PK/UC获得什么好处?
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论