索引的概念

本文详细介绍了数据库索引的概念,包括其作用、不同类型(如唯一性、非唯一性和组织结构),创建索引的语法以及原则,同时涵盖了索引的删除和查询方法。特别强调了何时适合创建和删除索引,以及如何通过数据字典视图获取索引信息。
摘要由CSDN通过智能技术生成
  • 索引的概念
       1.索引是一种可选的与表相关的数据库对象,用于提高数据的查询效率。
       2.索引是一种有序的数据结构。
       3.如果一个表没有创建索引,则对该表进行查询时需要进行全表扫描;如果创建了索引,则在有条件查询时,系统先对索引进行查询,利用索引可以迅速查询到符合条件的数据。
       4.利用索引之所以能够提高查询效率,是因为在索引结构中保存了索引值及其相应记录的物理地址 ,即ROWID,并且按照索引值进行排序。当查询数据时,系统根据查询条件中的索引信息,利用特定的排序算法在索引结构中很快查询到相应的索引值及其对应 ROWID,根据ROWID可以在数据表中很快查询到符合条件的记录。如图所示:
    在这里插入图片描述

  • ROWID 的概念与作用
       1.在Oracle数据库中,ROWIN 是一个伪列,系统自动产生,能唯一标识每一条数据库行记录的 物理地址 ,通过ROWIN能快速定位到一条行记录。
       2.ROWID由18位16进制数构成。其中前1-6位为数据对象编号,7-9位为数据文件编号,10-15数据块编号,最后 3位为块中行 编号。
       3.因为使用ROWID可以快速定位记录,所以使用ROWIN检索及操作数据,效率最快。

  • 索引分类
       1.根据索引值是否唯一,可分为唯一性索引 和 非唯一性索引
       2.根据索引的组织结构不同,可分为平衡数索引 和 位图索引
       3.根据索引基于的列数不同,可以分为单列索引 和 复合索引

  • 创建索引语法
       1.创建索引使用 create index 索引名称 on 表名
       2.创建非唯一性索引:create index 索引名 on 表名
       3.创建唯一性索引: create unique index 索引名 on 表名
       4.创建复合索引: create index 索引名 on user( username, userage)

  • 创建索引原则
       由于索引作为一个独立的数据库对象存在,占用存储空间,并且需要系统进行维护,因此是否创建索引和创建什么样的索引需要遵循一定的原则。下列情况下 ,适合创建索引:
          1.表中数据量很大
          2.要查询的结果占表中的数据的 2% - %4
          3.经常用来做where条件中的列或者多表连接的列
          4.查询列的数据范围分布很广
          5.查询列中包含大量的Null值,因为空值不包含在索引中
       下列情况不适合创建索引
          1.数据量很小的表
          2.在查询中不常用来作为查询条件的列
          3.频繁更新的表
          4.查询条件中有单行函数时,用不上索引
          5.索引列作为表达式的一部分被使用 时,比如查询的条件是 salary * 12,此时在 salary 列上创建索引是没有效果的。

  • 删除索引
       下面几种情况可以考虑删除索引:
          1.索引不在使用
          2.通过一段事件监视,发现几乎没有查询或只有少数查询会使用该索引。
          3.由于移动了表数据而导致索引失效。
       删除索引后,索引中的数据及定义被删除,索引所占的数据空间被释放,但表中的数据仍然存在 。
          1.如果索引是通过create index 语句创建的,可以使用drop index 语句删除索引,语法为: drop index 索引名
          2.如果索引是定义约束时自动建立的,则禁用约束或删除约束时会自动删除对应的索引。
          3.此外,删除表时会自动删除与其相关的所有索引。

  • 查询索引信息
       1.可以通过查询 数据字典视图 或 动态性能视图 获取索引信息。
       2.数据字典视图 USER_INDEXES 包含索引的基本描述信息和统计信息,包括索引的所有者 、索引名称、索引的类型 、对应表的名称等等。
       3.数据字典视图 USER_IND_COLUMNS 包含索引列的描述信息,包括索引的名称、表的名称和索引列的名称等信息。
       例:select* from USER_INDEXES

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值