千家信息网

Oracle索引创建及管理

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,Oracle 索引创建及管理1. Oracle 索引简介在 Oracle 数据库中,存储的每一行数据都有一个 rowID 来标识。当 Oracle 中存储着大量的数据时,意味着有大量的 rowID ,
千家信息网最后更新 2025年01月20日Oracle索引创建及管理

Oracle 索引创建及管理

1. Oracle 索引简介

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

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

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

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

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

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

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

2. 创建索引

在创建索引时, 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 ));

3. 修改索引

修改索引使用 alter index 完成。

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

合并索引:

Alter index index _ test

Coalesce deallocate unused ;

重建索引:

Alter index index _ test rebuild

Tablespace user 1;

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

4. 删除索引

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

Drop index index _ test

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

5. 显示索引信息

为了显示索引的信息, 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 '


索引 数据 空间 存储 查询 函数 用户 位图 参数 条件 字段 情况 碎片 类型 不同 信息 大小 子句 数据库 结构 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 元旦网络安全温馨提示 2017网络安全培训 应用化学属于哪个数据库 杨某年内不得从事网络安全管理 网络安全事故可以作为免责条款吗 江苏戴尔服务器续保调试 当数据库的恢复模式为什么时 僵尸毁灭工程与服务器卡 瀚堂典藏数据库怎么登录 打拐数据库找到多少人 行业网络安全事件的处置流程 网络安全必须做以下哪几点 我的世界灵域服务器 国家网络安全知识竞赛时间 一个服务器装多个数据库 手机怎么做电子软件开发 网络安全管理安全控制与服务 微信小程序读取数据库 上海辅助网络技术中心收费 上海馨瀚网络技术有限公司 刀片服务器维修费需要多少钱 循环检测数据库中有没有新增数据 浦东新区国际软件开发直销价格 网络安全和电信诈骗朗诵题目 网络安全必须做以下哪几点 网络安全国内外大的品牌 net百万级数据库 安装数据库出错称iis 下载文件的服务器是什么 服务器管理器的功能
0