我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Oracle 中如何创建和管理索引

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Oracle 中如何创建和管理索引

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Couchbase中如何创建和管理索引

在Couchbase中,可以使用N1QL(Couchbase Query Language)来创建和管理索引。以下是创建和管理索引的一些步骤:创建索引:可以使用N1QL语句来创建索引。例如,以下是创建一个名为index_name的索引的示
Couchbase中如何创建和管理索引
2024-04-09

如何在MariaDB中创建和管理索引

在MariaDB中,可以使用CREATE INDEX语句来创建索引,可以使用ALTER TABLE语句来添加、删除或修改索引。以下是一些在MariaDB中创建和管理索引的示例:创建索引:CREATE INDEX index_name ON
如何在MariaDB中创建和管理索引
2024-03-15

oracle如何创建索引

oracle 中创建索引需遵循以下步骤:确定表和索引列。使用 create index 语句,指定索引名称、表名称和列名称。指定索引类型(默认 b-tree),并可添加 unique、primary key 等选项。注意事项包括性能影响、维
oracle如何创建索引
2024-06-12

什么是索引,在Oracle中如何创建索引

索引是一种数据结构,它可以提高数据库检索数据的性能。索引是一个指向表中数据位置的指针,可以帮助数据库引擎更快地定位和检索数据。在Oracle数据库中,可以使用CREATE INDEX语句来创建索引。语法如下:CREATE INDEX i
什么是索引,在Oracle中如何创建索引
2024-04-09

Oracle创建和管理分区索引的操作方法

目录创建分区索引1. 创建分区表2. 创建本地分区索引3. 创建全局分区索引管理分区索引1. 重建分区索引http://www.lsjlt.com3. 拆分分区4. 删除分区5. 查看分区索引状态示例代码总结创建和管理分区索引(Partit
Oracle创建和管理分区索引的操作方法
2024-08-21

MySQL索引如何创建和使用索引

创建MySQL索引可以通过以下两种方式:使用CREATE INDEX语句创建索引:CREATE INDEX index_name ON table_name (column_name);例如,要在名为students的表上创建一个名为stu
MySQL索引如何创建和使用索引
2024-03-06

MySQL中如何创建和优化索引

在MySQL中,可以使用CREATE INDEX语句来创建索引。例如,要在名为table_name的表中创建一个名为index_name的索引,可以使用以下语法:CREATE INDEX index_nameON table_name
MySQL中如何创建和优化索引
2024-04-09

mysql中如何创建索引

这篇文章主要介绍mysql中如何创建索引,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在执行CREATE TABLE语句时可以创建索引,也可以单独用CREATE INDEX或ALTER TABLE来为表增加索引。1、
2023-06-15

es如何创建索引和mapping

本文小编为大家详细介绍“es如何创建索引和mapping”,内容详细,步骤清晰,细节处理妥当,希望这篇“es如何创建索引和mapping”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。es创建索引和mapping索
2023-07-05

oracle如何查看索引创建时间

要查看Oracle数据库中索引的创建时间,可以通过以下步骤进行操作:1. 首先,使用以下命令登录到Oracle数据库的SQL*Plus或任何其他可用的SQL客户端应用程序中:```sqlplus username/password@data
2023-08-20

如何在SQLServer中创建索引

在SQL Server中创建索引可以通过以下步骤实现:使用 CREATE INDEX 语句来创建索引,语法如下:CREATE INDEX index_nameON table_name (column1, column2, ...);在上
如何在SQLServer中创建索引
2024-04-09

编程热搜

目录