[oracle]索引与索引表管理
2017-01-18 22:26
232 查看
(一)索引的概念
索引是一种与表或簇相关的数据库对象,能够为数据的查询提供快捷的存取路径,减少磁盘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创建索引:
解释:
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
【未完待续。。。】
索引是一种与表或簇相关的数据库对象,能够为数据的查询提供快捷的存取路径,减少磁盘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海量数据优化-02分区在海量数据库中的应用-更新中
- Oracle安装后遇到错误:The Network Adapter could not establish the connection
- Oracle Database Instance
- oracle学习总结---record
- oracle中的decode的使用
- oracle学习总结-----trigger
- oracle学习总结-----package
- oracle学习总结------procedure
- orcle学习总结------exception
- oracle学习总结---plsql基本语法
- oracle学习总结---------角色和权限管理
- oracle学习总结-----序列和索引
- oracle学习总结-------数据库的约束
- oracle学习总结------函数的使用
- oracle学习总结------创建新的数据库实例
- Oracle学习总结-----分页查询
- oracle学习总结-----子查询
- oracle学习总结-----------多表查询
- oracle学习总结------ CRUD操作(create/retrleve/update/delete
- oracle学习总结--------oracle数据库的启动流程