vit*_*ala 0 oracle indexing partitioning
我正在阅读 Oracle 分区索引的文档。人们随处都可以发现本地分区索引和全局分区索引之间的区别,这对我来说是很清楚的。
我很困惑,“全局”一词并不意味着索引根本已分区。
例如,Thomas Kyte 在“专家 Oracle 数据库架构”中有几个示例,如下所示:
create index partitioned_idx_global
on partitioned(timestamp)
GLOBAL;
Index created.
Run Code Online (Sandbox Code Playgroud)
人们可以在其他地方找到类似的示例,其中关键字 GLOBAL 后面没有任何分区描述。
GLOBAL 之后没有分区子句,这似乎与CREATE INDEX docs中允许的内容形成对比。
非分区全局索引的文档对我来说也没有多大意义。
全局非分区索引的行为与本地非分区索引类似。
“本地非分区索引”到底是什么?它甚至不应该存在。
所以最终我的问题是消除混乱。常规索引和全局非分区索引有什么区别?上面书中引用的语法是否“合法”?
“本地非分区索引”到底是什么?
不存在“本地非分区索引”之类的东西。看起来这很可能是一个文档错误。我认为他们想说的是
“全局非分区索引的行为就像非分区表上的索引一样。”
所以是的,Tom Kyte 书中引用的语法是合法的。
GLOBAL 之后没有分区子句,这似乎与 CREATE INDEX 文档中允许的内容相反
默认情况下,GLOBAL 索引是非分区的。也就是说,表的所有分区都有一个索引。我们可能想要这样做的主要原因是在整个表中强制执行唯一约束。实际上,很少需要这样做:分区通常仅限于数据仓库,其中约束执行通常较宽松,因为 DML 更加锁定。
您链接到的文档显示了如何创建全局分区索引。这是一种混合结构,它允许我们使用与数据分区方案不同的分区方案构建索引。老实说,我从未在任何使用分区的网站中遇到过这种情况。然而,@matthewmcpeak 提出了一个可能有用的场景。因此,为了未来的探索者的利益,我将他的评论包含在这个答案中。
全局哈希分区索引是减少对序列值的非常活跃、唯一索引的争用的好方法。通常,所有插入都位于索引的右侧。如果许多并行会话中有许多插入,则可能会出现很多争用 - 每个会话都会给其他会话带来更多工作(因为它们都需要应用大量 UNDO 来撤销已提交的更改以获得一致的块读取) )。对此的一个旧解决方案是使用
REVERSE
索引。现在,全局哈希分区索引更好——减少争用,而不会破坏物理 I/O。应用该技术不需要对表本身进行分区。
归档时间: |
|
查看次数: |
1471 次 |
最近记录: |