Oracle ~ 索引创建及管理

  • 1. Oracle 索引简介
  • 2. 创建索引
    • 2.1 B-Tree索引
    • 2.2 位图索引
    • 2.3 反向键索引
    • 2.4 基于函数的索引
  • 3. 修改索引
  • 4. 删除索引
  • 5. 显示索引信息

1. Oracle 索引简介

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

用户可以根据情况不同创建多种类型的索引。按照索引的存储方式将索引分为 B 树索引、 位图索引、 反向索引和 基于函数的索引。创建索引时需要注意以下几点:当对 Oracle 表执行指定条件的查询时,常规的方法是将所有的记录取出来,然后再把每一条记录与查询条件作对比,最后返回满足条件的记录。这样操作不仅耗费时间并耗费资源。当有了索引之后,只需要在索引中找到符合查询条件的索引字段值,就可以通过保存在索引中的 rowID 快速找到表中对应的记录。

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

  • 索引应该建立在 where 子句频繁引用、排序以及分组的列上,如果选择的列不合适将无法提升查询速度;
  • 限制索引的个数。索引只要提升查询速度,但会降低 DML 操作的速度;
  • 指定索引块空间的使用参数。基于表建立索引时, Oracle 会将相应表添加到索引块。为索引添加数据时, Oracle 会按照 pctfree 参数在索引块上预留部分空间。如果将来在表上执行大量的 insert 操作,那么应该在建立索引时设置较大的 pctfree ;
  • 将表和索引部署到相同的表空间,可以简化表空间的管理;将表和索引部署到不同的表空间,可以提高访问性能( Oracle 能够并行读取不同硬盘的数据);

2. 创建索引

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

2.1 B-Tree索引

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

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

Create index index_test on emp ( deptno )tablespace users            --是指你创建的这个索引放在哪个表空间下面pctfree 10                     --是指你创建的索引至少要保留10%作为空闲空间,以便插入与删除initrans 2                   --支持并发操作的初始事务量maxtrans 255                  --支持并发操作的最大事务量storage(initial 64K               --一个区得大小为64Knext 1Mminextents 1                 --是指初始区的个数为1个。区是oracle的最小单位,对应的就是磁盘空间maxextents unlimited        --这个当然就是最大区的个数无限制);

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

2.2 位图索引

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

位数索引例:

Create bitmap index index _ testOn emp ( salary )Tablespace users ;

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

修改该参数语句为:

Alter system set create _ bitmap _ area _ size =8388608Scope = spfile ;

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

2.3 反向键索引

在单调递增的列上使用 B 树索引时,若用户对表中数据做了删除操作,将导致对某一边的叶子节点的大量占用。 Oracle 提供另一种索引机制,及反向键索引,它可以将添加的数据随机分散到索引中。

反向键索引是一种特殊的 B 树索引,在顺序递增数列上建立索引非常有用。反向键索引在原理和存储结构方面和 B 树索引类似。当用户插入记录时,将列值进行反向操作后进行索引,此时数据不在是递增的,所以新数据在值的范围上分布通常比原来的有序树更均匀。

反向键索引例:

Create index index _ testOn emp ( deptno ) reverseTablespace users ;

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

Alter index index _ testRebulid reverse ;

2.4 基于函数的索引

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

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

Create index index _ testOn emp ( lower ( job ));

常用与UPPER、LOWER、TO_CHAR(date)等函数分类上,例:

create index idx_func on emp(UPPER(ename)) tablespace tablespace_name;

3. 修改索引

修改索引使用 alter index 完成。

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

合并索引:

Alter index index _ testCoalesce deallocate unused ;

重建索引:

Alter index index _ test rebuildTablespace 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 ’

Oracle ~ 索引种类、创建及管理相关推荐

  1. Oracle索引梳理系列(二)- Oracle索引种类及B树索引

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  2. oracle怎么么创建索引,Oracle 创建索引,oracle索引怎么创建

    Oracle 创建索引,oracle索引怎么创建 索引是数据库服务器用来加快检索的速度,再通过加了索引的列进行检索 时候,数据库会自动使用索引,使用索引所在的列值进行快速检索,快速定位到 真实的数据内 ...

  3. oracle自动分区如何创建本地索引吗,创建与管理Oracle分区表和本地索引的实例解析...

    创建与管理Oracle分区表和本地索引的相关知识是本文我们主要要介绍的内容,我们知道,Oracle的分区技术在某些条件下可以极大的提高查询的性能,所以被广泛采用.从产品上说,分区技术是Oracle企业 ...

  4. mysql索引的创建与管理实验_mysql索引创建与管理笔记

    什么是索引 索引是创建在表上的,对数据库表中一列或多列的值进行排序的一种结构. 其作用主要在于提高查询的速度,降低数据库系统的性能开销. 通过索引,查询数据不必读完记录的全部信息进行匹配,而是只查询索 ...

  5. Oracle索引(Index)创建使用

    Oracle对象教程:索引(Index)创建使用,索引:对数据库表中的某些列进行排序,便于提高查询效率. 例如现实中例子: 当我们在某本书中查找特定的章节内容时,可以先从书的目录着手,找到该章节所在的 ...

  6. Oracle索引梳理系列(六)- Oracle索引种类之函数索引

    函数索引 1.1 概述 在实际应用中,当条件列使用函数运算进行数据匹配时,即使该列建立了索引,索引也不会被使用. 如下示例,其中在owner列上建立一个普通b-tree索引,观 察两种查询方式(不使用 ...

  7. oracle索引创建与使用方法,oracle 索引的创建与使用

    什么是数据库索引 在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快. 索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容. 对于数据库来说,索引是 ...

  8. Oracle索引梳理系列(四)- Oracle索引种类之位图索引

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  9. Oracle数据库之创建和管理表

    Oracle数据库总结: Oracle数据库之集合运算 Oracle数据库之数据处理 Oracle数据库之建表和管理表 Oracle数据库之对象视图.索引.序列.同义词 建表语法: create ta ...

  10. ORACLE开发:创建与管理表空间和数据文件1

    Oracle在逻辑上以表空间存储数据,而实际上是以数据文件存储数据. 表空间和数据文件 表空间:某一时刻只属于一个数据库:由一个或多个数据文件组成:可近一步划分逻辑存储单元 数据文件:只能属于一个表空 ...

最新文章

  1. 【STM32】中断优先级管理
  2. 函的红头文件格式制作_Excel实现批量制作年会邀请函,这个方法,你一定不能错过...
  3. Nginx之进程间的通信机制(信号、信号量、文件锁)
  4. 重写 geturl Openlayers中使用TileCache加载预切割图片作为基础地图图层
  5. TCP/IP模型各个层次的功能和协议
  6. Layui组件 sliderVerify 实现滑块验证
  7. 得到照片_用PS制作重曝效果的人像艺术照片
  8. 儿童学计算机编程好处,十个理由告诉你孩子为什么要学习编程?
  9. 纯js代码-实战轮播图
  10. 3dmax 2023安装教程
  11. 逻辑回归(LR)算法java实现转
  12. handsome for Typecho主题重建备忘
  13. python·turtle画中国国旗
  14. 企业服务总线Enterprise service bus介绍
  15. XML完整教程和什么是XML语言
  16. springboot配置tomcat
  17. 【Unity】动作游戏开发实战详细分析-16-敌人AI设计
  18. 马化腾曾在家搞四条电话线和8台电脑,做慧多网深圳站站长
  19. Mathematica基本绘图
  20. 美视频网站引进直播频道 加快淘汰有线电视

热门文章

  1. 停车场管理系统软件详细设计说明书
  2. 1.基于物品的协同过滤推荐算法理解
  3. jmeter TCP接口压力测试
  4. 综合布线实训室解决方案(转载)
  5. 如何进行系统分析与设计
  6. hive三种建表语句
  7. 【测试】Appium原理
  8. Solaris 查看系统信息命令
  9. Modbus_TCP 报文格式解析
  10. 【学习笔记】常见的激励函数和损失函数