千家信息网

Oracle 中如何创建和管理索引

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章将为大家详细讲解有关Oracle 中如何创建和管理索引,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在 Oracle 数据库中,存储的每一行数
千家信息网最后更新 2026年11月01日Oracle 中如何创建和管理索引

这篇文章将为大家详细讲解有关Oracle 中如何创建和管理索引,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

  在 Oracle 数据库中,存储的每一行数据都有一个 rowID 来标识。当 Oracle 中存储着大量的数据时,意味着有大量的 rowID ,此时想要快速定位指定的 rowID ,就需要使用索引对象。

  当对 Oracle 表执行指定条件的查询时,常规的方法是将所有的记录取出来,然后再把每一条记录与查询条件作对比,最后返回满足条件的记录。这样操作不仅耗费时间并耗费资源。当有了索引之后,只需要在索引中找到符合查询条件的索引字段值,就可以通过保存在索引中的 rowID 快速找到表中对应的记录。

  用户可以根据情况不同创建多种类型的索引。按照索引的存储方式将索引分为 B 树索引、位图索引、反向索引和基于函数的索引。创建索引时需要注意以下几点:

  l 索引应该建立在 where 子句频繁引用、排序以及分组的列上,如果选择的列不合适将无法提升查询速度;

  l 限制索引的个数。索引只要提升查询速度,但会降低 DML 操作的速度;

  l 指定索引块空间的使用参数。基于表建立索引时, Oracle 会将相应表添加到索引块。为索引添加数据时, Oracle 会按照 pctfree 参数在索引块上预留部分空间。如果将来在表上执行大量的 insert 操作,那么应该在建立索引时设置较大的 pctfree ;

  l 将表和索引部署到相同的表空间,可以简化表空间的管理;将表和索引部署到不同的表空间,可以提高访问性能( Oracle 能够并行读取不同硬盘的数据);

  

Oracle如何创建索引

  在创建索引时, Oracle 首先对将要简历索引的字段进行排序,然后将排序后的字段值和对应记录的 rowID 存储在索引段中。查询时,根据索引查询指定条件的 rowID ,再根据 rowID 提取数据行。

  1) B 树索引

  B 树索引时 Oracle 最常用的索引类型(也是默认类型),是以 B 树结构组织并存放索引数据。默认情况下 B 树索引中的数据是以升序方式排列的。 B 树索引是由根块、分支块和叶块组成。

  例:为 emp 表的 deptno 列创建索引 index _ test

  Create index index _ test on emp ( deptno )

  Pctfree 25

  Tablespace users ;

  其中,子句 pctfree 指定为将来 insert 操作所预留的空闲空间,子句 tablespace 指定索引段所在的表空间

  2) 位图索引

  当需创建索引列包含的取值太少时,如对性别列创建索引,取值只能是"男"或者"女",使用 B 树索引取出来的值任然太多,失去了索引的意义。这种情况需要使用位数索引,

  例:

  Create bitmap index index _ test

  On emp ( salary )

  Tablespace users ;

  注:初始化参数 create _ bitmap _ area _ size 用于指定建立位图索引时分配的位图区大小,默认值为8 MB ,该参数越大建立位图索引的速度越快。修改该参数语句为:

  Alter system set create _ bitmap _ area _ size =8388608

  Scope = spfile ;

  修改后需要重新启动数据库方可生效;

  3) 反向键索引

  在单调递增的列上使用 B 树索引时,若用户对表中数据做了删除操作,将导致对某一边的叶子节点的大量占用。 Oracle 提供另一种索引机制,及反向键索引,它可以将添加的数据随机分散到索引中。反向键索引是一种特殊的 B 树索引,在顺序递增数列上建立索引非常有用。反向键索引在原理和存储结构方面和 B 树索引类似。当用户插入记录时,将列值进行反向操作后进行索引,此时数据不在是递增的,所以新数据在值的范围上分布通常比原来的有序树更均匀。

  例:

  Create index index _ test

  On emp ( deptno ) reverse

  Tablespace users ;

  如果该列上已经建立了 B 树索引,那么可以将其修改为反向键索引:

  Alter index index _ test

  Rebulid reverse ;'

  4) 基于函数的索引

  用户在使用数据库时,最常遇到的问题是大小写字符敏感。例如在 emp 表中 Job 字段有 MANAGER 的记录,当用户使用小写搜索时则无法找到该记录,只能通过函数 upper 对应进行转换,在使用转换后的数据进行检查。但是这样查询是,即便 job 列有普通索引, Oracle 也会执行全表搜索,并为遇到的各个行计算 upper 函数。这种情况可以使用建立基于函数的索引,通常只是常规 B 树索引,但是它存放的数据是由表中数据应用函数后得到的,而不是直接存放表中的数据本身。

  如果习惯使用小写字符串,可以创建如下索引:

  Create index index _ test

  On emp ( lower ( job ));

  

修改索引

  修改索引使用 alter index 完成。

  为表建立索引后,随着对表不断进行更替、插入和删除动作,索引中国会产生越来越多的存储碎片,导致索引工作效率降低。这是可以采取重建索引和合并索引清除碎片。合并索引只是将 B 树中叶子节点的存储碎片合并在一起,并不会改变索引的物流组织结构。

  合并索引:

  Alter index index _ test

  Coalesce deallocate unused ;

  重建索引:

  Alter index index _ test rebuild

  Tablespace user 1;

  重建索引时可以更改索引的类型,存储表空间等

  

删除索引

  删除索引使用 drop index 语句。当索引过于碎片化,或者不经常被用到时,既可以删除索引:

  Drop index index _ test ;

  注:删除表是也会删除其相应的索引。

  

显示索引信息

  为了显示索引的信息, Oracle 提供了一系列数据字典视图,使用户了解索引的各方面信息。

  1) 显示表的所有索引:显示 emp 的所有索引

  Select * from dba _ indexs where owner =' EMP '

  2) 显示索引列:显示 index _ test 所使用的索引列:

  Select * from user _ ind _ columns where index _ name =' INDEX _ TEST '

  3) 显示索引位置及大小

  Select * from user _ segments where segment _ name =' INDEX _ TEST '

  4) 显示函数索引

  Select * from user _ ind _ expressions where index _ name =' INDEX _ TEST '

关于Oracle 中如何创建和管理索引就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

索引 数据 空间 存储 查询 函数 用户 位图 参数 条件 字段 情况 碎片 类型 管理 不同 信息 大小 子句 数据库 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手冲咖啡和咖啡机区别 疫情对互联网科技公司影响 中资互联网科技 互联网 的科技创新 互联网科技作文 有木互联网科技 大白互联网科技 科技伦理 互联网公司 华脉科技工业互联网产品 蓝色互联网科技 成都玖崟互联网科技有限公司乐商圈怎么样 深圳前海聚择互联网科技有限公司 互联网公司科技股 未来五年的互联网科技 中国科技创新与世界互联网大会 为客找房互联网科技公司怎么样 互联网科技股为什么大涨 图游互联网科技 北京品多多互联网科技有限公司 长沙易易互联网科技有限公司 广州大一互联网络科技有限公司 科技互联网创业计划书 海南购全球互联网科技 互联网科技创新企业排名 太原新华互联网科技学校怎么样 互联网科技实习生岗位职责 速维有品互联网信息科技(苏州)有限公司 长沙互联网科技 浙南科技城互联网大厦招聘 山东大美朱楼互联网科技有限公司
0