在Oracle数据库中进行索引与约束

2018-01-01 20:41李凡
科学与财富 2017年30期
关键词:约束

李凡

摘 要: 在Oracle数据库中为了优化数据库存储结构,提高查询的效率,很有必要进行数据库的索引与约束设置,本文就几种常用的索引与约束进行介绍与探讨,结合大数据系统的开发,针对性地提出加强数据库配置的必要性。

关键词: Oracle;索引;约束

一、索引的概念

索引是Oracle的一个对象,索引中存储了特定列的排序数据,实现对表的快速访问。使用索引可以很快查找到建立索引时列的值所在的行,而不必对表实现全表扫描,所以适当的使用索引可以减少磁盘I/O量。

二、建立索引的方式

建立索引的方式有很多种,从建立索引到查看索引,通过参数命令执行,常用的索引有以下几种,大致介绍如下:

1、B-树索引:它是Oracle默认的索引类型,位图索引与反向键索引建立在其基础之上。B-树索引结构有三个基本组成部分:根节点、分支结点和叶子节点,其中根节点位于索引结构的最顶端,而叶子节点位于索引结构的最低端,中间为分支节点。B-树索引的特点是平衡性强,不会因为数据变更操作影响索引性能。B-树索引结构图如下所示。

2、位图索引:它是大数据支持的索引机制,适用于没有大量更新任务的数据仓库,因为位图索引里的关联数据太多,所以有大量数据更新时,位图索引需做大量的更改,系统开销较大,位图索引比较适合精确性查找。创建位图索引的实例如下

SQL> create bitmap index emp

2 on emp(job);

索引已创建。

3、反向键索引:它是指在创建索引的过程中对索引列创建的索引键值的字节反向,以避免查找的无序。使用反向键索引使得每个键值被颠倒顺序,将序列性的键值分散开,使得键值平衡地保存在叶子节点中。创建反向键索引需要使用REVERSE关键字,实例如下

SQL> create index emp

2 on emp(sal) reverse;

索引已创建。

4、基于函数的索引:在用户查询数据时,如果查询语句的WHERE字句中有函数存在,Oracle使用函数索引将加快查询速度,基于函数的索引,使用表的列函数值作为键值建立索引结构。以下是通过UPPER函数创建基于函数的索引实例。

SQL> create index dept

2 on dept(UPPER(dname));

索引已创建。

索引建立后,还需监控索引,索引不完整,还要重建索引,索引不用,要删除索引,这一系列操作,构成了索引的体系。

三、约束的概念

Oracle引入约束的目的是保证插入表的数据满足一定的要求,这个要求可以理解为业务规则的声明,约束作为数据定义的一部分,所以它是声明性的,而不是过程性的,这种简单的业务规则便于编写代码与维护。使用约束比在应用程序中使用规则验证更有效,执行速度更快。

四、约束的分类

约束按照功能可以分为五种,对于每种的特点大致进行介绍如下。

1、非空约束:该约束不允许某列为NULL,例如某员工表EMP中,员工号是不允许为空,即要求员工号必须存在且为数字类型NUMBER,在表EMP的定义过程中已定义了非空约束。通过数据字典可以清楚地查询约束信息。

2、主键约束:该约束和唯一键约束很相似,但是主键约束不允许插入空值NULL,主键唯一标识一个表的记录,主键可以在一列或多列上创建。对于创建主键约束,可以通过对该列插入重复值进行验证,如果主键约束结果唯一且不能为空,说明约束正确。

3、唯一约束:该约束要求列的值在表中是唯一的,但是可以插入空值NULL,也就是说表中某列的值不能重复,以确保数据的唯一性。数据的唯一性在数据库操作中可以避免查找的误判与数据有效性规则的制定。

4、条件约束:该约束是比较灵活的一类约束,可以根据需要对表设置更多的规则限制,条件约束说明表中每一行的某列或几列的数据必须满足的条件。条件约束可以使用一个或多个约束条件,可以在单一条件约束中使用复合条件,也可以对同一列使用多个条件约束。条件约束的判断标准是条件约束的返回值,TRUE表示满足条件,FALSE表示不满足条件,拒绝执行。条件约束可以在创建表时创建,也可以在表创建完成后对某列创建。

5、外键约束:该约束不仅仅涉及一个表,它还涉及主表和从表,使用外键约束使得Oracle可以维护主表和从表之间的引用完整性。简单地说,如果要插入从表的一行数据,则某列的值要参考主表中引用参考的值,而不能无限制地插入记录。

五、两者的维护

索引的维护就是修改索引的各种参数,在维护索引前先需知道当前索引的参数位置,再根据设置进行參数的调整,以下是索引参数的修改实例。

SQL>alter index emp

2 rebuild

3 pctfree 30

4 storage (next 100k);

通过对pctfree参数的修改,适当增加存储空间,这样可以合并索引碎片,维护磁盘空间,有利于系统开销后的释放。

约束的维护包括约束的完整性设置与约束的更改操作,尤其是删除约束性操作普遍,该操作随时进行,要求用户具有删除约束的条件并知道约束的名字,一般可以通过数据字典USER来查找约束的名字,进而使用DROP指令删除约束,通过以下实例说明。

SQL>alter table emp

2 drop constraint SYS

通过该指令,删除表emp的唯一约束。

六、系统评价

索引已经成为关系数据库非常重要的部分。它们被用作包含所关心数据的表指针。通过一个索引,能从表中直接找到一个特定的记录,而不必连续顺序扫描这个表,一次一个地去查找。对于大的表,索引是必要的。当然索引需要占物理空间,对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。所以并非所有的数据库都以相同的方式使用索引。作为通用规则,只有当经常查询索引列中的数据时,才需要在表上创建索引。索引占用磁盘空间,并且降低添加、删除和更新行的速度。如果应用程序非常频繁地更新数据或磁盘空间有限,则可能需要限制索引的数量。在表较大是在建立索引,表中的数据越多,索引的优越性越明显。

数据库约束是为了保证数据的完整性而实现的一套机制,它具体的根据各个不同的数据库的实现而有不同的工具,所以我们在学习约束的时候就会看到域完整性(Domain Integrity)、实体完整性(Entity Integrity)、参照完整性(Referential Integrity)与用户定义完整性(User-defined Integrity)的不同的约束分类。约束能够提高Oracle数据库操作的稳定性与查询效率,对于数据挖掘等高端操作起到一定的保障作用。

总之,随着大数据的开发,数据库的优化配置也在不断地进行调整,索引与约束会深层次地进行改变,以适应将来数据库的要求。

参考文献

[1] 魏科科. 基于Oracle数据库的索引优化[J]. 电脑知识与技术,2015,10.

[2] 裘志华. 基于Oracle数据库的完整性约束[J].电子商务,2015,4.

[3] 刘超,张明安. 基于Oracle数据库系统的研究[J]. 软件,2016,4.endprint

猜你喜欢
约束
约束离散KP方程族的完全Virasoro对称
RN中Schrödinger-Poisson方程约束极小元的存在性
基于低频软约束的叠前AVA稀疏层反演
自我约束是一种境界
适当放手能让孩子更好地自我约束
不等式约束下AXA*=B的Hermite最小二乘解