暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ORACLE 索引名称矫情

IT界数据库架构师的漂泊人生 2017-05-03
389


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_idx     on 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 表分区键索引 才够味!


最后修改时间:2020-10-12 12:17:42
文章转载自IT界数据库架构师的漂泊人生,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论