类似文章很多,以下是本人的试验,主要说明一点:本地分区索引的分区可以和数据的分区不在一起,也可以在一起。
drop table test_p2 cascade constraint;
create table test_p2(Names varchar2(30),age int,home varchar2(100),mail varchar2(100))
partition by range(age)
(
partition p_1 values less than(11) ,
partition p_2 values less than (21),
partition p_3 values less than(31),
partition p_4 values less than (41),
partition p_other values less than (maxvalue)
) tablespace tbs_j_fact;
create index ind_test_p2 on test_p2(names,age) tablespace tbs_j_index local;
insert into test_p2 values('lzf',32,'fj','lzfhope@163.com');
insert into test_p2 values('ssi',41,'fj','lzfhope1@163.com');
insert into test_p2 values('lxy',11,'fj','lzfhope2@163.com');
insert into test_p2 values('lhh',8,'fj','lzfhope3@163.com');
insert into test_p2 values('阿达',26,'fj','lzfhope3@163.com');
select * from test_p2
BEGIN
DBMS_STATS.gather_table_stats('JYFX','TEST_P2',cascade => TRUE,force => TRUE);
END;
select partition_name,tablespace_name,num_rows from User_Tab_Partitions where table_name='TEST_P2'
PARTITION_NAME TABLESPACE_NAME NUM_ROWS
------------------------------ ------------------------------ ----------
P_1 TBS_J_FACT 1
P_2 TBS_J_FACT 1
P_3 TBS_J_FACT 1
P_4 TBS_J_FACT 1
P_OTHER TBS_J_FACT 1
SELECT partition_name,tablespace_name,distinct_keys FROM USER_IND_PARTITIONS WHERE INDEX_NAME='IND_TEST_P2'
PARTITION_NAME TABLESPACE_NAME DISTINCT_KEYS
------------------------------ ------------------------------ -------------
P_1 TBS_J_INDEX 1
P_2 TBS_J_INDEX 1
P_3 TBS_J_INDEX 1
P_4 TBS_J_INDEX 1
P_OTHER TBS_J_INDEX 1
结论:可以通过简单地加个tablespace参数指定本地分区索引和数据的分区不同分区。
实验默认的不加分区的
create index ind_test_p2_names on test_p2(names) local;
BEGIN
DBMS_STATS.gather_table_stats('JYFX','TEST_P2',cascade => TRUE,force => TRUE);
END;
SELECT partition_name,tablespace_name,distinct_keys FROM USER_IND_PARTITIONS WHERE INDEX_NAME='IND_TEST_P2_NAMES'
SQL> SELECT partition_name,tablespace_name,distinct_keys FROM USER_IND_PARTITIONS WHERE INDEX_NAME='IND_TEST_P2_NAMES'
2 /
PARTITION_NAME TABLESPACE_NAME DISTINCT_KEYS
------------------------------ ------------------------------ -------------
P_1 TBS_J_FACT 1
P_2 TBS_J_FACT 1
P_3 TBS_J_FACT 1
P_4 TBS_J_FACT 1
P_OTHER TBS_J_FACT 1
结论:如果不加参数tablespace那么默认就是和数据同个分区了。
测试:你完全可以自行指定分区,但依然可以是本地的。
create index ind_test_p2_mail on test_p2(age,mail) local
(
partition p_1 tablespace tbs_j_fact ,
partition p_2 tablespace tbs_j_fact,
partition p_3 tablespace tbs_j_fact,
partition p_4 tablespace tbs_j_fact,
partition p_other tablespace tbs_j_index
)
SQL> SELECT partition_name,tablespace_name,distinct_keys FROM USER_IND_PARTITIONS WHERE INDEX_NAME='IND_TEST_P2_MAIL'
2 /
PARTITION_NAME TABLESPACE_NAME DISTINCT_KEYS
------------------------------ ------------------------------ -------------
P_3 TBS_J_FACT 1
P_4 TBS_J_FACT 1
P_OTHER TBS_J_INDEX 1
P_1 TBS_J_FACT 1
P_2 TBS_J_FACT 1
结论:你可以各个指定下。
总论:
1)加local分区索引很方便。
2)指定或者不指定分区默认表空间都可以。
3)单独指定每个分区的表空间也可以。