oracle数据库关于索引建立及使用的详细介绍


本文整理自网络,侵删。

索引的说明

索引是与表相关的一个可选结构,在逻辑上和物理上都独立于表的数据,索引能优化查询,不能优化DML操作,Oracle自动维护索引,频繁的DML操作反而会引起大量的索引维护。

如果SQL语句仅访问被索引的列,那么数据库只需从索引中读取数据,而不用读取表。

如果该语句同时还要访问除索引列之外的列,那么,数据库会使用rowid来查找表中的行。

通常,为检索表数据,数据库以交替方式先读取索引块,然后读取相应的表块。

索引的目的

主要是减少IO,这是本质,这样才能体现索引的效率。

1大表,返回的行数<5%

2经常使用where子句查询的列

3离散度高的列

4更新键值代价低

5逻辑AND、OR效率高

6查看索引在建在那表、列:

select * from user_indexes;

select * from user_ind_columns;

索引结构

oracle索引分为两大类结构:

B树索引结构<balance>

类似于字典查询,最后到leaf block ,存的是数据rowid和数据项

1.叶块之间使用双向链连接,为了可以范围查询。
2.删除表行时,索引叶块也会更新,但只是逻辑更改,并不做物理的删除叶块。
3.索引叶块不保存表行键值null的信息。

位图索引结构<bitmap>

在oracle中是根据rowid来定位记录的,因此,我们需要引入start rowid和end rowid,通过start rowid ,end rowid 和二进制位的偏移,我们就可以非常快速的计算出二进制位所代表的表记录rowid。位图索引的最终逻辑结构如下图:

我们称每一单元的<key ,startrowid,end rowid,bitmap>为一个位图片段。当我们修改某一行数据的时候,我们需要锁定该行列值所对应的位图片段,如果我们进行的是更新操作,同时还会锁定更新后新值所在的位图片段。例如我们将列值从01修改为03,就需要同时锁定01和03位图片段,此时如果有其他用户需要修改与01或者03关联的表记录上的索引字段,就会被阻塞,因此位图索引不适合并发环境,在并发环境下可能会造成大量事务的阻塞。
我们一般在表数据离散度比较低的时候使用位图索引,如t_doctor的empno值重复分布的比较多,则离散度比较低:create bitmap index job_bitmap on t_doctor(empno)

建立索引的方式

阅读剩余部分

相关阅读 >>

oracle数据库中表空间的基本管理操作小结

oracle实例的后台进程

oracle怎么修改表名

jdbc连接oracle数据库功能示例

关于oracle listener日志解析利器的使用方法

oracle学习笔记(二)

oracle 合并查询 事务 sql函数小知识学习

oracle rac是什么

oracle开发之分析函数简介over用法

19个常用oracle内置函数

更多相关阅读请进入《oracle》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...