D-MON-YYYY‘));
Table altered.
SQL> select INDEX_NAME, PARTITION_NAME from dba_ind_partitions where index_name=upper(‘orders_local_1_idx‘);
INDEX_NAME PARTITION_NAME
------------------------------ ------------------------------
ORDERS_LOCAL_1_IDX LOCAL1
ORDERS_LOCAL_1_IDX LOCAL2
ORDERS_LOCAL_1_IDX LOCAL3
ORDERS_LOCAL_1_IDX LOCAL4
ORDERS_LOCAL_1_IDX Q5
?
?
这里
系统已经自动以和表分区相同的名字自动创建了一个索引分区。同理,删除表分区时相对应的索引分区也自动被删除。
?
本地索引和全局索引还有一个显著的差别,就是上面提到的,本地索引可以创建成本地非前缀型,而全局索引只能是前缀型。
?
SQL> create index orders_local_2_idx
on orders(part_no)
local
(partition LOCAL1,
partition LOCAL2,
partition LOCAL3,
partition LOCAL4)
;
Index created.
SQL> select INDEX_NAME, PARTITION_NAME, HIGH_VALUE from dba_ind_partitions
where index_name=upper(‘orders_local_2_idx‘);
INDEX_NAME PARTITION_NAME HIGH_VALUE
------------------------------ ------------------------------ ---------------------------------------------------------
ORDERS_LOCAL_2_IDX LOCAL1 TO_DATE(‘ 1999-04-01 00:00:00‘, ‘SYYYY-MM-DD HH24:MI:SS‘,
‘NLS_CALENDAR=GREGORIA‘
ORDERS_LOCAL_2_IDX LOCAL2 TO_DATE(‘ 1999-07-01 00:00:00‘, ‘SYYYY-MM-DD HH24:MI:SS‘,
‘NLS_CALENDAR=GREGORIA‘
ORDERS_LOCAL_2_IDX LOCAL3 TO_DATE(‘ 1999-10-01 00:00:00‘, ‘SYYYY-MM-DD HH24:MI:SS‘,
‘NLS_CALENDAR=GREGORIA‘
ORDERS_LOCAL_2_IDX LOCAL4 TO_DATE(‘ 2000-01-01 00:00:00‘, ‘SYYYY-MM-DD HH24:MI:SS‘,
‘NLS_CALENDAR=GREGORIA‘
?
?
从上面的输出可以看出,虽然索引的键值是part_no,但索引分区的键值仍然和表的分区键值相同,即ord_date,也即是所谓的非前缀型索引。
?
最后,再引用一个例子说明前缀索引和非前缀索引的应用。
?
假设有一个使用DATE列分区的大表。我们经常使用一个VARCHAR2列(VCOL)进行查询,但这个列并不是表的分区键值。
?
有两种可能的方法来访问VCOL列的数据,一是建立基于VCOL列的本地非前缀索引,
?
? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
? ? ? ? ? ? ?------- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -------
? ? ? ? ? ? | ? ? ? | ? ? ? ? (10 more ? ? ? ? ? ? ? ?| ? ? ? ?|
Values: ? ? A.. ? ? Z.. ? partitions here) ? ? ? ? ? ?A.. ? ? ?Z..?
?
另一种是建立基于VCOL列的全局索引,
?
? ? ? ? ? ? ? ? | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
? ? ? ? ? ? ? ------- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -------
? ? ? ? ? ? ?| ? ? ? | ? ? ? ? (10 more ? ? ? ? ? ? ? ?| ? ? ? ?|
Values: ? ? ?A.. ? ? D.. ? partitions here) ? ? ? ? ? ?T.. ? ? ?Z..?
?
可以看出,如果能够保证VCOL列值的唯一性,全局索引将会是最好的选择。如果VCOL列值不唯一,就需要在本地非前缀索引的并行查询和全局索引顺序查询以及高昂的维护代价之间做出选择。