我已经划分了一个表,它几乎以每天7-8百万行的速度增长。分区是使用时间戳列完成的,因为数据可以在几周后存档或丢弃。我还在表上创建了一个索引,该索引位于主键或其他唯一的值上。我的索引也是分区的,但是索引的分区是使用散列函数完成的,不包括表的分区键(这是时间戳)。所以我有几个问题。
这张表是一个写密集型的表.目前,它主要是插入,每行更新一次,并在创建后几秒钟内通过索引id进行2-3次查找,然后对任何操作都不会访问记录。
任何其他建议都会有帮助。
发布于 2018-02-05 07:16:26
实际上,我不知道有什么理由让索引分区与表分区不同(这就是您所拥有的)。
创建全局索引或本地索引,即分区索引,其中索引的分区与基础表的分区相同。
当您有全局索引并且删除或截断一个分区时,全局索引就变得“不可用”,必须重新构建。您可以通过将子句UPDATE INDEXES
添加到drop/truncate语句中来自动实现这一点。然而,这样的操作可能需要一段时间,这是全球指数的主要缺点。
一般来说,本地索引更好,它们更易于维护,而且通常更快,因为它们更小。但是,如果您有许多分区,并且您的主要查询不包括分区键(在您的情况下是时间戳),那么本地索引可能会对性能产生负面影响。如果您有100个分区,那么Oracle必须扫描100个索引分区,这基本上意味着:扫描100个索引!在这种情况下,全球指数要快得多。
https://stackoverflow.com/questions/48615599
复制相似问题