Oracle之索引

索引分类:

一、按照存储形式分

1.B—tree索引 (索引列、原始数据、rowid)

2.位图索引 (位图、rowid)

3.反向键索引 (索引列、原始数据、反向存储、rowid)

4.基于函数的索引 (经过函数处理后的索引列、原始数据、rowid)

二、按照唯一性

1.唯一索引:索引列中不能出现重复数据

2.非唯一索引:索引列中能出现重复数据

三、按照列的个数分

1.单列索引:基于一列建立的索引

2.复合索引:基于多个列建立的索引

 

建立索引

 

1.B—tree索引

语法:

create index 索引名 on 表名(列名,。列名可以写多个相当于符合索引)

create index ind_emp_ename on emp(ename)

选中sql语句可以看找到数据按F5可以看到按照什么方式找到

注意:

1.B—tree索引是oracle 默认索引类型,工作中最常见

2.适应场景:列基数比较大

列基数:该列不重复的数据(姓名、编号)

3.有根节点(索引列的顶级块),有枝节点(包含下一节点信息指向下一分支或者叶),有叶节点

(存放索引的入口数据)

 

2.位图索引 

位图索引在创建时会扫描整张表,为索引列的每个取值,建立一个不重复的位图(bitmap)来描述该取值

语法:

create bitmap index 索引名 on 表名(列名)

适应场景:列基数比较小(性别,婚姻状况)

 

3.反向键索引 

视作b-tree索引的一种特殊形式

背景:为了防止b-tree索引在某个叶上数据占比过高

适应场景:原始数据分支不明显,反向数据分支明显(170-180多 150-160少)

语法

create index 索引名 on 表名(列名) reverse

 

4.基于函数的索引

视作b-tree索引的一种特殊形式

背景:在某个字段上过滤时经常使用函数

适应场景:在某列进行过滤时经常配合函数使用

语法

create index 索引名 on 表名(函数(列名)) 

 

索引失效情况:

1.对于一般的b-tree索引,通配符出现在搜索词的首位时不会引用索引

ename like '%M%',,%在首位

2.在索引列上使用<>!=号时

3.索引不能用or连接,否则失效

4.查询条件有多个列的时候务必要索引列放在前面

 

索引会降低dml语句执行效率

禁用索引

语法

alter index 索引名 unusable

重新启用

alter index 索引名 rebuild

或者删掉索引再重新建

删除索引

drop index 索引名

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值