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