Oracle 如果在索引创建过程中需要手动指定范围,分区索引如何提供帮助?
今天,为了满足性能调优需求,我从这里阅读了关于“分区索引”的内容 链接中给出的示例如下所示:Oracle 如果在索引创建过程中需要手动指定范围,分区索引如何提供帮助?,oracle,performance,indexing,Oracle,Performance,Indexing,今天,为了满足性能调优需求,我从这里阅读了关于“分区索引”的内容 链接中给出的示例如下所示: CREATE INDEX employees_global_part_idx ON employees(employee_id) GLOBAL PARTITION BY RANGE(employee_id) (PARTITION p1 VALUES LESS THAN(5000), PARTITION p2 VALUES LESS THAN(MAXVALUE)); 直到这一切看起来都很好,只是我有点困
CREATE INDEX employees_global_part_idx ON employees(employee_id)
GLOBAL PARTITION BY RANGE(employee_id)
(PARTITION p1 VALUES LESS THAN(5000),
PARTITION p2 VALUES LESS THAN(MAXVALUE));
直到这一切看起来都很好,只是我有点困惑,在定义这个索引的过程中,我们手动将p1的值设置为小于5000
例如,如果表有12000条记录,一个分区有1到5000条记录,另一个分区有5000到12000条彼此不相等的记录。这种方法的另一个障碍是,如果需要的话,以后不能创建更多的分区。因此,随着时间的推移,这种索引方法将无法提供良好的性能优势
那么,在分区索引中有什么方法可以克服这个问题呢?如果创建新记录时员工id值增加,您可能需要使用一个分区索引而不是分区索引 根据: 散列分区全局索引还可以限制索引倾斜对单调增加的列值的影响 然后,您的索引创建查询将是:
CREATE INDEX employees_global_part_idx ON employees(employee_id) GLOBAL
PARTITION BY HASH(employee_id)
(PARTITION p1,
PARTITION p2);
这使Oracle能够在可用分区之间均匀地分割数据
如果您真的想使用分区索引,那么您需要不时地通过拆分最后一个分区并重建索引来维护索引
另请阅读:.在分区方面,Oracle提供了三种类型的索引:
:每个表分区都有一个对应的索引分区。我认为这种类型被大多数人使用(并且很有用)本地分区索引
:索引没有分区,并且跨越整个表。例如,当分区键不是唯一键的一部分时,唯一键需要这样的索引全局非分区索引
(您在问题中提到的类型):定义表的分区规则独立于索引的分区规则李>全局分区索引
实际上,我无法想象“全局分区索引”真正有意义的任何情况。它们只对一些非常特殊的、特殊的、特殊的产品有用。异国情调的用例。可能当您拥有大量数据时,您必须将索引分布在不同的物理存储上。您好,这些值p1和p2代表什么?@Mistu4u这些是分区的名称,正如您在问题中编写的示例中所定义的。您可以使用任意文本。全局哈希分区索引用于缓解右侧增长索引中的索引块争用。