我正在阅读oracle分区索引的文档。在任何地方都可以找到本地分区索引和全局分区索引之间的区别,这在我看来是很清楚的。
我感到困惑的是,“全局”一词并不意味着索引是分区的。
例如,Thomas Kyte在“专家Oracle数据库体系结构”中有几个示例,如下所示:
create index partitioned_idx_global
on partitioned(timestamp)
GLOBAL;
Index created.我们可以找到类似的例子,在这些例子中,关键字GLOBAL没有在其他地方使用任何分区描述。
全局之后没有分区子句,这似乎与创建索引文档中允许的内容形成了对比。
无分区全局索引的文档对我来说也没有多大意义。
全局无分区索引的行为就像本地无分区索引一样。
什么是“本地无分区索引”?它甚至不应该存在。
因此,我的问题最终是要澄清混乱。规则索引和全局无分区索引有什么区别?以上书中引用的语法是否“合法”?
发布于 2019-07-19 09:31:12
什么是“本地无分区索引”?
没有“本地无分区索引”这样的情况。看来这可能是文档错误。我想他们想说的是
“全局无分区索引的行为就像非分区表上的索引一样。”
所以是的,汤姆·凯特的书中引用的语法是合法的。
在全局之后没有分区子句,这似乎与创建索引文档中所允许的相反。
默认情况下,全局索引是不分区的。也就是说,表的所有分区都有一个索引。我们可能希望这样做的主要原因是在整个表中强制执行唯一的约束。在实践中,很少需要这样做:分区通常仅限于数据仓库,在数据仓库中,约束强制通常更宽松,因为DML更容易锁定。
链接到的文档演示如何创建全局分区索引。这是一种混合结构,它允许我们使用与数据分区不同的分区方案来构建索引。老实说,在我处理分区的任何站点上,我从来没有遇到过这种情况。然而,@matthewmcpeak提出了一种可能有用的场景。因此,为了将来的寻求者的利益,我将他的意见包括在这个答复中。
全局散列分区索引是减少非常活跃的、唯一的序列值索引争用的好方法。通常,所有插入都在索引的右侧。如果有许多来自多个并行会话的插入,那么可能会有很多争用--每个会话都会为其他会话带来更多的工作(因为它们都需要应用大量撤销来取消提交的更改,以获得一致的块读取)。解决这一问题的一个老方法是使用
REVERSE索引。现在,全局散列分区索引更好--减少争用而不破坏物理I/O。为了应用该技术,不需要对表本身进行分区。
发布于 2019-07-19 12:40:28
原则上,Oracle提供三种类型的索引。
UNUSABLE,并且您必须重新构建它。最常见的是全局无分区索引和本地分区索引。实际上,我无法想象任何用例,如果一个全局分区索引会有意义,它们可能只有在非常特殊的情况下才有用。
https://stackoverflow.com/questions/57107906
复制相似问题