[oracle]索引与索引表管理

(一)索引的概念

索引是一种与表或簇相关的数据库对象,能够为数据的查询提供快捷的存取路径,减少磁盘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
  • 【未完待续。。。】

    时间: 2024-08-26 08:11:38

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

    Oracle【二维表管理:约束】

    1.简单的表创建和字段类型最简单的方式去创建表(没有添加主键之类的约束条件)[Oracle的字段类型]number:数值类型--整数类型:number(a) 总长度a--小数类型:number(a,b) 总长度a,小数长度b,小数可缺省varchar2:字符类型--字符类型 varchar2(ln) ln表示字符的最大长度,实际存储内存的长度<=ln--特点:多态分配存储空间,节省空间char:字符类型--字符类型char(ln) 不管字符数据长度多大,直接在内存开辟ln大小的空间存储数据--特

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

    1.查找表的所有索引(包括索引名,类型,构成列): select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.table_name = 要查询的表 2.查找表的主键(包括名称,构成列): select cu.* from user_cons_columns cu, user_constr

    Oracle索引总结(五)- Oracle索引种类之表簇索引(cluster index)

    表簇索引(cluster index) 对于表簇索引而言,必须使用表簇. 由于簇索引与索引表簇关联紧密,无法单独拿出来总结,因此一并进行总结. 1.1 表簇的定义 表簇是一组通过相同公共列(簇键),构成的表的集合. 如上图,右侧独立的两张表,employees员工表与departments部门表,通过簇键department_id列,构成了左侧的一个表簇(cluster). 当构成表簇后,一个单独的数据块会包含多个表的数据行信息. 1.2 表簇的分类 对于oracle数据库,主要支持两种表簇:索

    oracle 索引聚簇表的工作原理

    作者:Richard-Lui 一:首先介绍一下索引聚簇表的工作原理:(先创建簇,再在簇里创建索引,创建表时指定列的簇类型) 聚簇是指:如果一组表有一些共同的列,则将这样一组表存储在相同的数据库块中:聚簇还表示把相关的数据存储在同一个块上.利用聚簇,一个块可能包含多个表的数据.概念上就是如果两个或多个表经常做链接操作,那么可以把需要的数据预先存储在一起.聚簇还可以用于单个表,可以按某个列将数据分组存储. 更加简单的说,比如说,EMP表和DEPT表,这两个表存储在不同的segment中,甚至有可能存

    Oracle 11g笔记——索引组织表

    一.索引组织表(Index-Organized Table, IOT) 索引组织表是一类特殊的表,它将索引和表的数据存储在一起.普通表的数据以无序(Heap)的方式存放在数据库中. 而索引组织表按照主键进行排序,以二叉树的形式对表的数据进行存储. 索引组织表不存储ROWID,它通过主键来访问数据. 索引组织表适合通过主键对数据进行访问的应用. 1.优点 (1)快速的随机访问.索引和表的数据存储在一起,如果对表进行更新,Oracle只更新索引结构. (2)快速的范围扫描.索引组织表已经按照主键对数

    表管理和索引,外键作用

    表管理和索引,外键作用: 创建数据库create schema if not exists students character set 'gbk' collate 'gbk_chinese_ci'; cd students lsfile db.optcat db.optdefault-character-set=gbkdefault-collation=gbk_chinese_ci 修改数据库help alter database;help drop databases; help creat

    oracle 性能优化--索引总结

    索引是建立在表的一列或多个列上的辅助对象,目的是加快訪问表中的数据: Oracle存储索引的数据结构是B*树.位图索引也是如此,仅仅只是是叶子节点不同B*数索引: 索引由根节点.分支节点和叶子节点组成.上级索引块包括下级索引块的索引数据,叶节点包括索引数据和确定行实际位置的rowid. 使用索引的目的: 加快查询速度 降低I/O操作 消除磁盘排序 何时使用索引: 查询返回的记录数 排序表<40% 非排序表 <7% 表的碎片较多(频繁添加.删除) 索引的种类 非唯一索引(最经常使用) 唯一索引

    堆组织表,索引组织表和索引聚簇表

    --- 堆组织表就不说了,其索引中记录了记录所在位置的rowid,查找的时候先找索引,然后再根据索引rowid找到块中的行数据 索引组织表,其行数据以索引形式存放,因此找到索引,就等于找到了行数据. -- 堆组织表的数据是散放的,索引和表的数据是分离的 索引组织表的索引和数据是在一起的 -- 堆组织表的存储速度因为不用考虑排序, 所以存储速度会比较快. 但是要查找符合某个条件的记录, 就必须得读取全部的记录以便筛选.而这个时候为了加快查询速度, 索引就出现了, 索引是针对少量特定字段的值拿出来进

    oracle树状索引详解(图摘取《收获不止oracle》)

    一.树状索引特点 1.高度较低 2.存储列值 3.结构有序 我们先看一下索引的结构,如图: 以上结构图说明索引是由 ROOT(根块),Branch(茎块)和Leaf(叶子块)三部分组成的,其中最底层的叶子块 主要存储了 key column value(索引列具体值),以及能具体定位到数据所在位置的rowid(此处rowid和查询时候用的rownum不是同一个概念,有兴趣可以百度rownum和rowid的区别) 注意点:索引块和数据块 需要区分,索引块也是占磁盘空间的 二.oracle索引查询