理论教育 Oracle数据库管理与开发:创建索引实现

Oracle数据库管理与开发:创建索引实现

时间:2023-10-30 理论教育 版权反馈
【摘要】:索引有两种创建方式,一种方式是在表上指定主键约束或唯一性约束时自动创建唯一索引,另一种方式是通过命令手工创建。默认情况下,Oracle数据库中创建的索引就是非唯一B树索引。例如,下面代码在books表的bookprice列上创建一个非唯一B树索引。通过在CREATE INDEX语句中添加UNIQUE,用户可以自己创建唯一B树索引,简称唯一索引。基于函数的索引基于函数的索引是在B树索引或位图索引的基础上,将一个函数计算得到的结果作为索引值而创建的索引。

Oracle数据库管理与开发:创建索引实现

索引有两种创建方式,一种方式是在表上指定主键约束或唯一性约束时自动创建唯一索引,另一种方式是通过命令手工创建。前一种方式在第9章中已经介绍,这里主要介绍后一种方式。

索引是一种数据库对象,它虽然建立在某个表之上,但一般情况下它被单独存放在一个索引段中,因此用户在创建索引时可以为索引段指定物理属性和存储参数等信息。

使用CREATE INDEX语句创建索引,其基本语法格式为:

CREATE[UNIQUE|BITMAP]INDEX[模式名.]索引名

ON[模式名.]表名(列1,列2,...)

[TABLESPACE表空间名|DEFAULT]

[REVERSE];

(1)B⁃树索引

B⁃树索引是Oracle数据库中最常用的一种索引结构,它按照平衡树算法来构造索引,这种索引中的叶子结点保存索引键值和一个指向索引行的ROWID信息。默认情况下,Oracle数据库中创建的索引就是非唯一B⁃树索引。

例如,下面代码在books表的bookprice列上创建一个非唯一B⁃树索引。

通过在CREATE INDEX语句中添加UNIQUE,用户可以自己创建唯一B⁃树索引,简称唯一索引。

例如,下面代码在books表的booknum列上创建一个唯一索引。

(2)位图索引(www.daowen.com)

与B⁃树索引不同,位图索引不存储ROWID值,也不存储键值,它用一个索引键条目存储指向多行的指针,即每个索引条目指向多行。位图索引占用空间小,适合索引值基数少,高度重复而且只读的应用环境使用,也就是查询的列只有的几个固定值的情况,如性别、付款方式等。

例如,下面代码在orders表的payterms列上创建一个位图索引。

(3)基于函数的索引

基于函数的索引是在B⁃树索引或位图索引的基础上,将一个函数计算得到的结果作为索引值而创建的索引。函数可以是预定义函数,也可以是用户自定义的函数。无论是哪种情况,函数必须已经存在。

例如,下面代码在books表的bookname列创建一个基于函数的索引,以便在该列上执行与大小写无关的查询。

当用户执行下面的查询操作时就可以加快速度。因UPPER(bookname)的值已经提前计算并存储在索引中了。

(4)反向键值索引

索引列上的数据越随机,就越能体现B⁃树索引的优越性。然而,如果表中一个列上的值已经有序,或者基本有序,那么在该列上建立索引时,应该选择反向键值索引。创建反向键值索引的方法与创建B⁃树索引的方法类似,只不过是把索引列上的值按照相反的顺序存储在索引中,语法上只是需要使用REVERSE关键字进行区别。

例如,下面代码在表books的bookid列上创建反向索引,可以执行下面的语句:

在ALTER INDEX命令中,通过加REBUILD NOREVERSE或REBUILD REVERSE子句把索引修改为普通索引或反向键值索引。

(5)域索引

域索引就是用户自己构建和存储的索引,优化器根据索引的选择和执行的开销决定是否使用该索引。Oracle文本索引就是一种域索引,用于对大量的文本项提供关键字搜索。要完成基于文本的搜索,需要安装Oracle Database 11g中的Oracle Text组件,这里不再详细介绍。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈