(一)索引的概念

索引是一种与表或簇相关的数据库对象,能够为数据的查询提供快捷的存取路径,减少磁盘I/O,提高检索效率。

索引由索引值及记录相应物理地址的ROWID两个部分构成,并按照索引值有序排列,ROWID可以快速定位到数据库表符合条件的记录。可以这样理解,将索引看作是一本书的目录,索引值即为目录的标题,ROWID即为目录的页码。

(二)索引的更新策略

随着标准数据的插入、删除、修改,索引表中的信息会自动更新,具体过程:

l 向表中插入数据时,系统会在索引的叶子节点插入与表对应的索引条目;

l 删除表中的数据时,系统自动删除相关的索引条目,但是空间并没有回收,也不会分配给新的索引条目使用,只有将整个叶子节点删除,空间才会被回收;

l 修改索引表中的数据时,系统会删除索引叶子节点的条目,然后重新分配索引条目

从更新策略可知,索引并不是创建的越多越好。索引在提高查询效率的同时,会降低数据插入、删除、更新的效率。Oracle建议将索引与表分散在不同的表空间中,最好分散在不同的磁盘上,以提高效率。

(三)索引结构

数据库有2种索引结构:平衡树索引结构(B_Tree)和位图索引结构(Bitmap)。

(1) 平衡树索引结构

整个索引结构由根节点、分支节点、叶子节点三部分构成,其中分支节点可以有多层。根节点的信息指向下一层分支节点,最底层的分值节点指向叶子节点,叶子节点保存索引条目信息。索引条目信息由4部分构成:索引基于的列信息(Index entry header)、索引列的长度(key column length)、索引值(key column value)及索引对应的ROWID。B_Tree索引占用空间多,适合索引取值范围广(基数大)、重复率低的应用。

图.平衡树索引结构图

(2)位图索引结构

位图结构也是按平衡树组织的,但是在叶子节点每个索引值对应一个位图而不是一个ROWID,一个位图里面可以包含一个或多个ROWID,位元到ROWID的映射是通过索引中的映射函数实现的。位图索引适合于取值范围小,待索引数据重复率高的列。

图.位图索引结构

(四)创建索引

可以使用create index创建索引:

CREATE [UNIQUE][BITMAP] INDEX [schema.]index_name
ON [schema.]table_name(index_expr[ASC | DESC][,...])
[PCTFREE integer] [PCTUSED integer] [INITRANS integer]
[STORAGE(storage_clause)]
[LOGGING][NOLOGGING]
[ONLINE]
[TABLESPACE tablespace_name]
[NOCOMPRESS | [ COMPRESS integer] ]
[SORT|NOSORT]
[REVERSE]
[NOPARALLEL |[ PARALLEL integer]]

解释:

  • UNIQUE:创建唯一性索引,默认非唯一性
  • BITMAP:创建位图索引,默认B_Tree索引
  • 用于指定索引值的排列顺序,ASC为升序,DESC为降序
  • PCTFREE | PCTUSED | INITRANS设置数据块的使用
  • STORAGE:设置索引的存储方式,若不指定,则继承表空间的存储参数设置
  • LOGGING | NOLOGGING:指明索引创建过程是否写入重做日志文件,默认写入
  • ONLINE:允许在创建索引或重建索引时执行DML(insert/update/delete等需要commit的语句)语句,但不允许执行DDL(create/alter/drop等不需要commit的语句)操作
  • TABLESPACE:指明存储索引的表空间
  • CMPRESS | NOCOMPRESS:是否压缩索引中的重复数据,默认不压缩
  • SORT | NOSORT:在默认情况下,创建索引时会首先对表中数据进行排序,假如我们的数据已经排好序了,我们可以选择NOSORT,加快索引创建的速度;
  • REVERSE:创建反序索引
  • NOPARALLEL | PARALLEL:指明是否允许并行创建索引,默认值为NOPARALLEL
  • 【未完待续。。。】

    [oracle]索引与索引表管理的更多相关文章

    1. Oracle【二维表管理:约束】

      1.简单的表创建和字段类型最简单的方式去创建表(没有添加主键之类的约束条件)[Oracle的字段类型]number:数值类型--整数类型:number(a) 总长度a--小数类型:number(a,b ...

    2. Oracle常用操作——创建表空间、临时表空间、创建表分区、创建索引、锁表处理

      摘要:Oracle数据库的库表常用操作:创建与添加表空间.临时表空间.创建表分区.创建索引.锁表处理 1.表空间 ■  详细查看表空间使用状况,包括总大小,使用空间,使用率,剩余空间 --详细查看表空 ...

    3. 简单了解,使用oracle中的索引,表分区

      索引的分类 如下: 物理分类 逻辑分类 分区或非分区索引 单列或组合索引 B树索引(标准索引) 唯一或非唯一索引 正常或反向键索引 基于函数索引 位图索引   B树索引 b树索引通常也称为标准索引,索 ...

    4. Oracle数据库对象(表空间/同义词/序列/视图/索引)

      数据库对象 Oracle数据库对象: 数据库对象是数据库的组成部分,常常用 CREATE 命令进行创建,可以使用 ALTER 命令修改,用 DROP 执行删除操作. 种类: (1)表空间:所有的数据对 ...

    5. Oracle组合索引与回表

      回表 简单来说就是数据库根据索引找到了指定的记录所在行后,还需要根据rowid再次到数据块里取数据的操作. "回表"一般就是指执行计划里显示的"TABLE ACCESS ...

    6. Oracle索引梳理系列(五)- Oracle索引种类之表簇索引(cluster index)

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

    7. Oracle 索引创建、表分区

      --EAF_WORKFLOWSTEP 表创建 CREATE TABLE EAF_WORKFLOWSTEP ( ) NOT NULL PRIMARY KEY USING INDEX TABLESPACE ...

    8. .Net程序员学用Oracle系列(6):表、字段、注释、约束、索引

      <.Net程序员学用Oracle系列:导航目录> 本文大纲 1.表 1.1.创建表 1.2.修改表 & 删除表 2.字段 2.1.添加字段 2.2.修改字段 & 删除字段 ...

    9. oracle查询所有用户表的表名、主键名称、索引、外键等

      1.查找表的所有索引(包括索引名,类型,构成列): select t.*,i.index_type from user_ind_columns t,user_indexes i where t.ind ...

    随机推荐

    1. C# this关键字的四种用法(转)

      用法一  this代表当前类的实例对象 namespace Demo { public class Test { private string scope = "全局变量"; pu ...

    2. 微信token验证源码分享(c#版)

      在开发时遇到一个问题: 上线后提交申请微信提示"您的服务器没有正确响应token验证...",我查看日志发现根本就没有接收到来自微信的参数. 后来我又记录了微信请求方式和请求的字符 ...

    3. .Net下Redis使用注意事项

      .Net下Redis使用注意事项 注:Redis的安装方法和桌面端工具很多,不在本文讨论范围内. 一:不结合适用场景的技术都是耍流氓,Redis主要适用场景: 简单字符串缓存 简单队列 简单发布订阅 ...

    4. cf375D. Tree and Queries(莫队)

      题意 题目链接 给出一棵 n 个结点的树,每个结点有一个颜色 c i . 询问 q 次,每次询问以 v 结点为根的子树中,出现次数 ≥k 的颜色有多少种.树的根节点是1. Sol 想到了主席树和启发式 ...

    5. vuejs+axios发送请求

      Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2.0 之后,官方就不再更新 vue-resource 目前主流的 Vue 项目,都选择 axios  ...

    6. 原生js的math对象

      Math对象方法 //返回最大值 var max=Math.max(95,93,90,94,98); console.log(max); //返回最小值 var min=Math.min(95,93, ...

    7. JAVA利用poi获取world文件内容

      本文主要简单介绍了利用poi包,读取world文件内容. 这个依然存在版本的问题,只能读取doc结尾的老版本文件. 话不多说,上代码: import java.io.File; import java ...

    8. June 09th 2017 Week 23rd Friday

      The supreme happiness of life is the conviction that we are loved. 生活中最大的幸福就是,坚信有人爱着我们. One of my go ...

    9. 卡方分布、卡方独立性检验和拟合性检验理论及其python实现

      如果你在寻找卡方分布是什么?如何实现卡方检验?那么请看这篇博客,将以通俗易懂的语言,全面的阐述卡方.卡方检验及其python实现. 1. 卡方分布 1.1 简介 抽样分布有三大应用:T分布.卡方分布和 ...

    10. Docker入门系列之三:如何将dockerfile制作好的镜像发布到Docker hub上

      这个系列的前两篇文章,我们已经把我们的应用成功地在Docker里通过nginx运行了起来,并且用dockerfile里制作好了一个镜像. Docker入门系列之一:在一个Docker容器里运行指定的w ...