Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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_Database Partitioning - Fatal编程技术网

Oracle中分区表的本地索引与全局索引

Oracle中分区表的本地索引与全局索引,oracle,database-partitioning,Oracle,Database Partitioning,我划分了一个表,该表几乎以每天700-800万行的速度增长。分区是使用时间戳列完成的,因为数据可以在几周后存档或丢弃。我还在表上创建了一个索引,该索引位于主键或另一个唯一值上。我的索引也是分区的,但是索引的分区是使用哈希函数完成的,不包括表的分区键(它是时间戳)。所以我有几个问题 该表是一个写密集型表。它目前主要是插入,每行更新一次,并在创建索引id后的几秒钟内进行2-3次查找,然后再也不会为任何操作访问该记录 在唯一id上定义本地索引是最佳选择,还是像我已经做的那样定义全局索引并对它们进行分

我划分了一个表,该表几乎以每天700-800万行的速度增长。分区是使用时间戳列完成的,因为数据可以在几周后存档或丢弃。我还在表上创建了一个索引,该索引位于主键或另一个唯一值上。我的索引也是分区的,但是索引的分区是使用哈希函数完成的,不包括表的分区键(它是时间戳)。所以我有几个问题

该表是一个写密集型表。它目前主要是插入,每行更新一次,并在创建索引id后的几秒钟内进行2-3次查找,然后再也不会为任何操作访问该记录

  • 在唯一id上定义本地索引是最佳选择,还是像我已经做的那样定义全局索引并对它们进行分区更好?如果我定义了全局索引,其中没有表分区键(timestamp,在查找中不使用),那么如果分区数量很大,访问会更昂贵吗
  • 对于不断增长的数据,使用全局分区索引的缺点是什么
  • 一旦我决定稍后删除分区,由于索引不是按时间戳而是按唯一id进行分区,该操作会对功能索引产生直接影响吗

任何其他建议都会有所帮助

实际上,我不知道有什么理由使索引分区不同于表分区(这就是您所拥有的)

创建全局索引或局部索引,即分区索引,其中索引的分区与基础表的分区相同

当您有全局索引并且删除或截断分区时,全局索引将变得“不可用”,必须重新生成。通过在drop/truncate语句中添加子句
updateindex
,可以自动实现这一点。然而,这样的操作可能需要一些时间,这是全局索引的主要缺点


一般来说,本地索引更好,更易于维护,而且通常更快,因为它们更小。但是,如果您有许多分区,并且您的主要查询不包括分区键(在您的例子中是时间戳),那么本地索引可能会对性能产生负面影响。如果您有100个分区,那么Oracle必须扫描100个索引分区,这基本上意味着:扫描100个索引!在这种情况下,全局索引要快得多。

实际上,我不知道有什么理由使索引分区不同于表分区(这就是您所拥有的)

创建全局索引或局部索引,即分区索引,其中索引的分区与基础表的分区相同

当您有全局索引并且删除或截断分区时,全局索引将变得“不可用”,必须重新生成。通过在drop/truncate语句中添加子句
updateindex
,可以自动实现这一点。然而,这样的操作可能需要一些时间,这是全局索引的主要缺点


一般来说,本地索引更好,更易于维护,而且通常更快,因为它们更小。但是,如果您有许多分区,并且您的主要查询不包括分区键(在您的例子中是时间戳),那么本地索引可能会对性能产生负面影响。如果您有100个分区,那么Oracle必须扫描100个索引分区,这基本上意味着:扫描100个索引!在这种情况下,全局索引要快得多。

我认为在一个没有缺点的通用解决方案中,您会有更好的、专门的注意,将日期位嵌入id字段,并单独用于分区和查询。我认为在一个没有缺点的通用解决方案中,您会有更好的、专门的注意,即嵌入将日期位输入id字段,并仅用于分区和查询。谢谢。这符合我的理解,也是我创建不同于表分区的全局索引分区的原因。我们按id查询记录。我最初的想法是,如果我按id查询,并且记录大量增长,那么拆分索引比拆分表更为有利。后续插入和更新的性能增益是可见的,但不是很大。所以我尝试了分区表,假设表大小的增长也会使后续的插入和更新变慢。由于存档需要,我需要按日期分割数据。但对于id更新查询,谢谢。这符合我的理解,也是我创建不同于表分区的全局索引分区的原因。我们按id查询记录。我最初的想法是,如果我按id查询,并且记录大量增长,那么拆分索引比拆分表更为有利。后续插入和更新的性能增益是可见的,但不是很大。所以我尝试了分区表,假设表大小的增长也会使后续的插入和更新变慢。由于存档需要,我需要按日期分割数据。但对于按id更新查询。