Oracle ~ 索引种类、创建及管理
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 ~ 索引种类、创建及管理相关推荐
- Oracle索引梳理系列(二)- Oracle索引种类及B树索引
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
- oracle怎么么创建索引,Oracle 创建索引,oracle索引怎么创建
Oracle 创建索引,oracle索引怎么创建 索引是数据库服务器用来加快检索的速度,再通过加了索引的列进行检索 时候,数据库会自动使用索引,使用索引所在的列值进行快速检索,快速定位到 真实的数据内 ...
- oracle自动分区如何创建本地索引吗,创建与管理Oracle分区表和本地索引的实例解析...
创建与管理Oracle分区表和本地索引的相关知识是本文我们主要要介绍的内容,我们知道,Oracle的分区技术在某些条件下可以极大的提高查询的性能,所以被广泛采用.从产品上说,分区技术是Oracle企业 ...
- mysql索引的创建与管理实验_mysql索引创建与管理笔记
什么是索引 索引是创建在表上的,对数据库表中一列或多列的值进行排序的一种结构. 其作用主要在于提高查询的速度,降低数据库系统的性能开销. 通过索引,查询数据不必读完记录的全部信息进行匹配,而是只查询索 ...
- Oracle索引(Index)创建使用
Oracle对象教程:索引(Index)创建使用,索引:对数据库表中的某些列进行排序,便于提高查询效率. 例如现实中例子: 当我们在某本书中查找特定的章节内容时,可以先从书的目录着手,找到该章节所在的 ...
- Oracle索引梳理系列(六)- Oracle索引种类之函数索引
函数索引 1.1 概述 在实际应用中,当条件列使用函数运算进行数据匹配时,即使该列建立了索引,索引也不会被使用. 如下示例,其中在owner列上建立一个普通b-tree索引,观 察两种查询方式(不使用 ...
- oracle索引创建与使用方法,oracle 索引的创建与使用
什么是数据库索引 在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快. 索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容. 对于数据库来说,索引是 ...
- Oracle索引梳理系列(四)- Oracle索引种类之位图索引
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
- Oracle数据库之创建和管理表
Oracle数据库总结: Oracle数据库之集合运算 Oracle数据库之数据处理 Oracle数据库之建表和管理表 Oracle数据库之对象视图.索引.序列.同义词 建表语法: create ta ...
- ORACLE开发:创建与管理表空间和数据文件1
Oracle在逻辑上以表空间存储数据,而实际上是以数据文件存储数据. 表空间和数据文件 表空间:某一时刻只属于一个数据库:由一个或多个数据文件组成:可近一步划分逻辑存储单元 数据文件:只能属于一个表空 ...
最新文章
- 【STM32】中断优先级管理
- 函的红头文件格式制作_Excel实现批量制作年会邀请函,这个方法,你一定不能错过...
- Nginx之进程间的通信机制(信号、信号量、文件锁)
- 重写 geturl Openlayers中使用TileCache加载预切割图片作为基础地图图层
- TCP/IP模型各个层次的功能和协议
- Layui组件 sliderVerify 实现滑块验证
- 得到照片_用PS制作重曝效果的人像艺术照片
- 儿童学计算机编程好处,十个理由告诉你孩子为什么要学习编程?
- 纯js代码-实战轮播图
- 3dmax 2023安装教程
- 逻辑回归(LR)算法java实现转
- handsome for Typecho主题重建备忘
- python·turtle画中国国旗
- 企业服务总线Enterprise service bus介绍
- XML完整教程和什么是XML语言
- springboot配置tomcat
- 【Unity】动作游戏开发实战详细分析-16-敌人AI设计
- 马化腾曾在家搞四条电话线和8台电脑,做慧多网深圳站站长
- Mathematica基本绘图
- 美视频网站引进直播频道 加快淘汰有线电视