Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如果在索引创建过程中需要手动指定范围,分区索引如何提供帮助?_Oracle_Performance_Indexing - Fatal编程技术网

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这些是分区的名称,正如您在问题中编写的示例中所定义的。您可以使用任意文本。全局哈希分区索引用于缓解右侧增长索引中的索引块争用。