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

Oracle 分区表上的本地唯一索引

askTom 2017-10-27
398

问题描述

汤姆,

我想知道为什么Oracle需要本地唯一索引上的分区键。
我意识到内部Oracle不想必须扫描所有本地索引段来检查约束。
但是为什么分区键需要在索引本身上?为什么Oracle无法从幕后的表行中获取其值?
在我看来,出于优化目的,他们需要索引上的键。这太不像Oracle了。
并且将键添加到约束不是解决方案,因为它会改变约束的含义。

人们如何处理这个 (在我看来) 限制?为什么我看不到更多对此的抱怨?

谢谢
亚历克斯

专家解答

这是一个锁定/并发问题。让我们考虑一个具有5个分区P1,P2,P3,P4和P5的表,并且我们允许使用局部唯一索引的概念 * 不带 * 分区键。

有人这样做:

插入到MY_TABLE ([值])

键列将把它放入 (说) 分区P2,我需要确保它是唯一的。

所以我会:

-检查P1是否有这个值...不在场,酷,我继续
-检查P2是否有这个值...不在场,酷,我继续
-检查P3是否有这个值...不在场,酷,我继续
...到目前为止,一切都很好。

现在当我搬到P4...其他人登录,并将此相同值插入分区p1。我会想念这个,因为我已经 * 检查了该分区。

为了克服这个问题,这意味着在 * 每一个 * 插入,我需要锁定整个表 (或锁定 * 所有 * 分区中的索引),这样我就可以安全地允许插入发生。

不是个好主意。


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

评论