oracle数据库:索引超过10%的记录

时间:2017-08-25 02:09:56

标签: sql oracle oracle10g

我有一张桌子X,尺寸非常大。每日100万个recods被插入此表中。我必须在表的一列上添加索引。但如果我这样做,可能会发生以下影响。

  1. 插入,更新,删除可能会很慢。
  2. 额外的磁盘空间。
  3. 将为每个DML语句更新索引。
  4. 无法预料的问题。
  5. 表X上已存在许多其他索引。
  6. 所以我的索引不会添加任何值,相反会产生更多麻烦。

    我想到了摆脱这种情况的方法。 但我不知道它是否可以实现。请建议。

    我想仅在表格中的前10%记录上创建索引。 而且该查询应该保持将来只有10%。

1 个答案:

答案 0 :(得分:2)

如果你的桌子确实很大,那么#34; (在我的一个应用程序中,我每天添加10亿行)然后你应该使用分区。我认为你的大多数问题都可以解决。

实际上我的答案无效,因为你不使用分区和使用石器时代的Oracle 10g,但无论如何我告诉你。

在版本12c中,Oracle引入了Partial Indexes for Partitioned Tables。使用此功能,您可以在单个分区上定义索引。

语法是这样的:

CREATE INDEX MY_INDEX ON MY_TABLE (IND_COLS) INDEXING PARTIAL;

您还可以关闭/开启现有索引的索引:

ALTER INDEX MY_INDEX INDEXING PARTIAL/FULL;

然后您可以禁用/重建每个分区的索引,如

ALTER INDEX MY_INDEX MODIFY PARTITION P_123 UNUSABLE;
ALTER INDEX MY_INDEX REBUILD PARTITION P_123;

索引由表分区控制,因此在创建任何索引之前,应将默认值设置为off,否则每个新创建的分区都将在"上进行索引。

ALTER TABLE MY_TABLE MODIFY DEFAULT ATTRIBUTES INDEXING OFF;