Oracle 索引

7 篇文章 0 订阅

索引:是指允许直接访问数据库表中一行数据的树型结构。为了提高查询效率而引入的,是一种独立于表的对象,可以存放在与表不同的表空间中。索引记录中存在索引关键字和指向数据库表中一行数据的指针(地址)。对索引进行I/O操作比对表进行操作要少很多,索引一旦建立就将被oralce系统自动维护,查询语句中不用指定使用哪个索引。

索引分类:

    索引逻辑分类:

 1、单列索引:基于一列数据操作

 2、多列索引:多列组合,最多为32列,组合索引的列不一定和表中字段顺序相同。

 3、唯一索引:列的值各不相同。

 4、非唯一索引:允许列的值相同。

 5、基于函数的唯一索引:利用表中的一列或多列基于函数表达式所创建的索引。既可以是B-树,也可以使位图索引。

   索引物理分类:

分区或非分区索引,非分区既可以是B-树,也可以是位图索引。

B-树:包括正常或反转关键字索引。

B-树索引

 

B 树索引结构

     至上而下,是根结点、分枝结点及叶子结点,叶子结点中有指向表中数据行的索引行。叶子结点被双向链表在一起,以方便按索引关键字升序或降序扫描。

索引的顶部为根,其中包含指向索引中下一级的项,下一级为分枝块,分枝块又指向索引中下一级的块,最低一级为叶节点,其中包含指向表行的索引项。叶块为双重链接,有助于按关键字值的升序和降序扫描索引。

索引项叶节点的格式

    索引项由以下三部分组成:

   1、 项标题(entry header),存储列数和锁定信息

   2、关键字列的“长度- 值”(length-value pairs) ,必需成对出现,定义了列长度,紧跟在列长度之后的就是列的值。

   3、行的行标识(RowID), 包含关键字值。

索引项叶结点的特征

   在非分区表上的 B 树索引中:

   1、如果多行具有相同的关键字值,并且索引没有被压缩,则关键字值重复存放。

   2、没有索引项与所有关键字列都为 NULL 的行对应,即如果某列值为Null,则不存储相应的索引项。如果Where子句中索引的所在列值为null,Oracle将不使用索引进行全表扫描。

   3、 因为所有行都属于同一段,所以使用受限行标识指向表中的行,使用RowID可以节省索引存储空间。

DML 操作对索引的影响

   当在表上执行 DML 操作时,Oracle 服务器将自动维护所有的索引,下面解释 DML命令对索引的影响:

   1、插入(Insert)操作导致在适当的块中插入索引项。

   2、删除(Delete)行只导致逻辑删除索引项,删除的行所用的空间不能用于新项,直到删除块中的所有项。

   3、更新(Update)操作将选删除,再插入,除了在创建时,其它任何时候PCTFREE 设置对索引都没有影响,即使索引块空间少于 PCTFREE 指定的空间,仍可以向索引块添加新项。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值