sql – Oracle:索引表的行的子集
我有一个表有活动的非活动条目,活动= 1表示活动,活动= 0表示不活动.
我在这个表上有各种索引,但我只需要为活动条目维护索引,因为应用程序只查询活动数据.需要保留非活动数据,因为它可以再次变为活动状态,但这通常仅通过批量更新完成,无论如何都不会使用索引. 我注意到索引非活动条目(有越来越多的活动条目)占用相当多的空间. 在Oracle(10g)中有没有办法做这样的事情: 在tab(active,col1,col2,…,coln)上创建索引an_idx,其中active = 1? 以前的尝试: 我尝试使用基于函数的索引在active = 0时将第一列设置为null,如下所示: 在选项卡上创建索引an_idx(decode(active,1,null),coln) 但在这种情况下,Oracle似乎仍然会为非活动列编制索引. 解决方法通过ACTIVE对表进行分区,创建本地索引,并使非活动分区的索引为UNUSABLE.这将消除索引非活动数据所花费的时间.create table tab(active number,col1 number,col2 number,col3 number) partition by list(active) (partition tab_active values(1),partition tab_inactive values(0)); create index tab_index1 on tab(col1) local; alter index tab_index1 modify partition tab_inactive unusable; 但这种方法有一些潜在的缺点: >并非所有类型的索引都不可用. 在Oracle 12c中,您可以使用partial indexes完成此任务: create table tab(active number,col3 number) partition by list(active) (partition tab_active values(1) indexing on,partition tab_inactive values(0) indexing off); create index tab_index1 on tab(col1) local indexing partial; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |