我有一张桌子X,尺寸非常大。每日100万个recods被插入此表中。我必须在表的一列上添加索引。但如果我这样做,可能会发生以下影响。
所以我的索引不会添加任何值,相反会产生更多麻烦。
我想到了摆脱这种情况的方法。 但我不知道它是否可以实现。请建议。
我想仅在表格中的前10%记录上创建索引。 而且该查询应该保持将来只有10%。
答案 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;