oracle 索引英文名称很多,翻译过来的话也很多中文名称,不过总得来说词不达意。也就是说讲中文的时候,对方无法理解你说的是啥意思,啥情况,啥原理。
比如前缀,非前缀。本地和全局,普通和分区。B树和位图,组合和单独。
然后这些不同的组合 比如说 本地前缀,本地非前缀。全局前缀,前缀和组合
索引先按结构来分: 有位图索引和B树索引,以及其他类型。
索引按字段来分: 有组合索引和单独索引。
索引按存储类型分:有分区索引和普通索引。
索引按分区键来分:有本地索引和全局索引。
索引按分区键与表分区键关系分: 前缀和非前缀。
一般有人认为全局索引也包含了普通索引,或许是吧!可本人认为最好不是,这有利于理解和沟通。
1 结构
create bitmap index ix_bm_sex on table ();
位图索引由于只存储键值的起止Rowid和位图
而树形索引存储分支节点,叶节点,键值还有双向指针。
2 字段 有两个以上的字段组合成索引 相反 就是单独索引
create index ix_bm_x on table (id,name);
create index ix_bm_y on table (id);
3 存储: 一般普通索引就是-个段,而分区索引是有多个段组成,
4 分区键: 全局索引表示其索引分区是按另外个字段来分区的。而本地索引是安表分区键的字段
分区表 按 ORD_DATE 日期进行范围分区
create table orders (
order_no number,
part_no varchar2(40),
ord_date date
)partition by range (ord_date);
本地索引
create index orders_local_1_idx on orders(order_no) local;
而全局索引:
create index orders_global_2_idxon orders(part_no) global partition by range(part_no)
两者区别在于关键字 global partition
5 前缀
nonprefixed index 先看下实例脚本
create index ind_local_prfixed on TEST_P(ord_date,part_no) local nologging;
create index ind_local_nonprfixed on TEST_P (part_no) local nologging;
第一个是本地前缀索引,第二个是本地非前缀索引。前缀应该理解为分区键在索引的第一位。
然全局索引只能做前缀索引,也就是索引分区字段必须在索引字段第一位。
其实它跟组合索引差不多,要考虑查询条件那个字段利用率高,把高的放在前面,有利于提高索引效率和索引命中率。
另外还有反键索引和压缩索引,还有个跟本地索引的同义词叫局部索引。
global index 和 local index 对应不同的中文名称 呵呵可把人给搞晕了。
global index 应该叫自定义分区键索引,local index 表分区键索引 才够味!