局部分區索引又分爲兩類:less
Local prefixed index(局部前綴索引)blog
Local nonprefixed index(局部非前綴索引)索引
Ⅰ:局部前綴索引:以分區鍵做爲索引定義的第一列get
Ⅱ:局部非前綴索引:分區鍵沒有做爲索引定義的第一列it
示例語句:io
create table local_index_example(table
id number(2),select
name varchar2 (50),channel
sex varchar2(10)im
)
partition by range (id)
( partition part_1 values less than (5),
partition part_2 values less than (10)
)
--
建立局部前綴索引;分區鍵(id)做爲索引定義的第一列
create index local_prefixed_index
on local_index_example (id, name) local;
--
建立局部非前綴索引;分區鍵未做爲索引定義的第一列
create index local_nonprefixed_index
on local_index_example (name, id) local;
注意:判斷局部索引是前綴仍是非前綴的只須要看分區鍵是否做爲索引定義的第一列
3. 何時該使用前綴索引?何時該使用非前綴索引?
對於該使用前綴仍是非前綴索引,這徹底取決於你的實際需求,你應該儘可能從實際角度出發選擇合適的索引方式以充分利用到其分區消除的特性。
若是查詢首先訪問索引的話,它可否實現分區消除徹底取決於查詢中使用的謂詞(即Where篩選條件);
好比用上面的 local_index_example 表舉例,現有兩個查詢:
①: select … from local_index_example where id = :id and name = :name;
②: select … from local_index_example where name = :name;
對於以上兩個查詢來講,若是查詢第一步是走索引的話,則:
局部前綴索引 local_prefixed_index 只對 ① 有用;
局部非前綴索引 local_nonprefixed_index 則對 ① 和 ② 均有用;
若是你有多個相似 ① 和 ② 的查詢的話,則能夠考慮創建局部非前綴索引;若是日常多使用查詢 ① 的話,則能夠考慮創建局部前綴索引;
總之,重點是你要儘量保證查詢包含的謂詞容許索引分區消除