我有一个包含以下列的父表:
表是由EVENT_DATE分区的。数据只保留一个月,最后一个分区每天被删除。
根据我的理解,在删除分区时,使用PK的全局索引会导致性能不合格。这意味着,为了创建本地索引,此表的PK必须同时基于PARENT_ID + EVENT_DATE。
我有第二个桌子,这是第一个孩子(通过一对多的关系)。它有以下各栏:
要对子表进行分区,我决定使用引用分区。它的一个大优点是:它消除了复制子表中的分区键的需要。然而,根据我的推理,实现这一目标的唯一途径是通过全局索引。这是我的思路:
此外,我还读到“当使用引用分区时,大多数子表索引应该定义为全局索引,除非有令人信服的理由将给定的索引定义为本地索引。”(NoCOUG.pdf)。
我是遗漏了什么,还是没有办法在没有全局索引或复制数据的情况下使用引用分区?
我们将非常感谢对引用分区如何与本地/全局索引工作的解释!
发布于 2013-05-14 06:08:27
你理解得对。如果要创建引用分区,则需要定义有效的FK。在您的情况下,parent_id和event_id都需要出现在子表中。
Ref分区用于根据一个列(而不是PK中的列)对表进行分区,而不是在子表中。这不是您的情况-您可以在两个表上应用范围分区并获得最大的剪枝。
子表中的event_date并不是多余的--它是模型所需要的--您需要为parent_id + event_date的每个实例在子表中使用data_columns 3/4。
对于ref分区表中子表的本地索引,我的逻辑正好相反。如果我有一个ref分区,我的目标是最大限度地修剪,这意味着我希望在每个查询中访问尽可能少的分区。在这种情况下,我需要本地索引,而不是全局索引。
您说过,“在PK中使用全局索引将导致删除分区时的性能不合格”。当您从表中删除一个分区时,所有全局索引都将失效,您必须重新构建它们。这是对DDL更改的唯一性能影响。分区表上的PK必须是全局的,所以您在这里没有选择。
发布于 2013-11-23 11:55:46
虽然上面的答案已经回答了,但您认为:“外键约束不能只引用PK的一部分,因此子表必须同时包含PARENT_ID和EVENT_DATE列。”
我相信,如果您的属性是用唯一约束定义的,那么FK可以引用部分PK &我在您的示例中看到了这一点。
示例:
表A(有序,有序,软垫) PF -> orderid,orderdate
表B(OrderID,ItemID)
在表B中,如果表A中将orderID定义为唯一的,则OrderID可以是FK。
我希望这能帮到你。
https://stackoverflow.com/questions/16533212
复制相似问题