【问题标题】:Global nonpartitioned index in OracleOracle 中的全局非分区索引
【发布时间】:2019-11-28 04:18:48
【问题描述】:

我正在阅读有关 oracle 分区索引的文档。到处都可以找到本地分区索引和全局分区索引之间的区别,这对我来说很清楚。

我很困惑,“全局”这个词并不意味着索引是分区的。

例如Thomas Kyte 在“专家级 Oracle 数据库架构”中有几个示例,如下所示:

create index partitioned_idx_global
on partitioned(timestamp)
GLOBAL;
Index created.

您可以找到类似的示例,其中关键字 GLOBAL 后面没有在其他地方进行任何分区描述。

GLOBAL 之后没有分区子句,这似乎与CREATE INDEX docs 中允许的内容相反。

documentation for nonpartitioned global indexes 对我来说也没有多大意义。

全局非分区索引的行为与本地非分区索引一样。

“本地非分区索引”到底是什么?它甚至不应该存在。

所以最终我的问题是消除混乱。常规索引和全局非分区索引有什么区别?上面书中引用的语法是否“合法”?

【问题讨论】:

    标签: oracle indexing partitioning


    【解决方案1】:

    Oracle 原则上提供三种类型的索引。

    • 全局非分区索引:您有一个跨越表的所有分区的索引。如果您更改表分区,则此类索引将获得UNUSABLE,您必须重新构建它。
    • 本地分区索引:该索引的分区方式与基表的分区相同。每个索引分区只属于一个表分区。
    • 全局分区索引:该索引已分区,但分区键与基表(也可以是非分区表)的分区键不同。例如,您可以让表未分区或按 RANGE 分区,但索引按不同列的 LIST 分区。

    最常见的是全局非分区本地分区索引。实际上,我无法想象 全局分区 索引会有意义的任何用例,它们可能仅在非常特殊的情况下才有用。

    【讨论】:

      【解决方案2】:

      “本地非分区索引”到底是什么?

      没有诸如“本地非分区索引”之类的东西。似乎这可能是一个文档错误。我想他们的意思是

      “全局非分区索引的行为就像非分区表上的索引一样。”

      所以是的,Tom Kyte 书中引用的语法是合法的。

      GLOBAL 之后没有分区子句,这似乎与 CREATE INDEX 文档中允许的相反

      默认情况下,GLOBAL 索引是非分区的。也就是说,表的所有分区都有一个索引。我们可能想要这样做的主要原因是在整个表中强制执行唯一约束。在实践中很少需要这样做:分区通常仅限于数据仓库,其中的约束执行通常较为宽松,因为 DML 更加锁定。

      您链接到的文档显示了如何创建 GLOBAL 分区索引。这是一种混合结构,它允许我们使用与用于分区数据的分区方案不同的分区方案来构建索引。老实说,我从未在使用过分区的任何站点中遇到过这种情况。但是,@matthewmcpeak 提出了一个可能有用的场景。因此,为了未来的寻求者,我将他的评论包括在这个答案中。

      全局散列分区索引是减少对非常活跃的、唯一的序列值索引的争用的好方法。通常,所有插入都在索引的右侧。如果有来自许多并行会话的许多插入,则可能会有很多争用——每个会话都会为其他会话带来更多工作(因为他们都需要应用大量 UNDO 来撤销已提交的更改以获得一致的块读取)。一个旧的解决方案是使用REVERSE 索引。现在,全局散列分区索引更好——在不破坏物理 I/O 的情况下减少争用。 表本身不需要为应用该技术进行分区。

      【讨论】:

      • 好的,谢谢。那么这是否意味着无论末尾是否有“GLOBAL”关键字或缺少关键字,从汤姆的书中创建的全局非分区索引都是相同的?索引是否相同?
      • 全局散列分区索引是减少对非常活跃的、唯一的序列值索引的争用的好方法。通常,所有插入都在索引的右侧。如果有来自许多并行会话的许多插入,则可能会有很多争用——每个会话都会为其他会话带来更多工作(因为他们都需要应用大量 UNDO 来撤销已提交的更改以获得一致的块读取)。一个旧的解决方案是使用REVERSE 索引。现在,全局散列分区索引更好——减少争用而不破坏物理 I/O。
      • @matthewmcpeak - 感谢您提供的信息。如果我发现自己有许多并行会话插入到分区表中,我希望我能记住这一点。以前从未遇到过,毫无疑问是因为我过着隐蔽的生活;-)
      • 表本身不需要为应用该技术进行分区。 :)
      • @matthewmcpeak - 哦,这很有趣,今晚晚些时候我会玩这个。我已将您的评论文本包含在我的回答中,因为我认为它值得保留。希望你不介意
      猜你喜欢
      • 2010-11-24
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      • 2019-06-06
      • 2013-06-02
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多