当前位置:文档之家› Oracle数据库管理第9章 视图、索引、序列、同义词

Oracle数据库管理第9章 视图、索引、序列、同义词


如果一个数据表中存有海量的数据记录,当对表执行指定条件的查询时。常规的查询方法会将 所有的记录都读取出来,然后再把读取的每一条记录与查询条件进行比对,最后返回满足条件的记 录。这样进行操作的时间开销和I/O开销都十分巨大的。对于这种情况,就可以考虑通过建立索引来 减小系统开销。 如果要在表中查询指定的记录,在没有索引的情况下,必须遍历整个表,而有了索引之后,只 需要在索引中找到符合查询条件的索引字段值,就可以通过保存在索引中的ROWID快速找到表中对应 的记录。举个例子来说,如果将表看作一个本书,则索引的作用则类似于书中的目录。在没有目录 的情况下,要在书中查找指定的内容必须阅读全书,而有了目录之后,只需要通过目录就可以快速 找到包含所需内容的页码(相当于ROWID)。 Oracle系统对索引与表的管理有很多相同的地方,不仅需要在数据字典中保存索引的定义,还 需要在表空间中为它分配实际的存储空间。创建索引时,Oracle会自动在用户的默认表空间或指定 的表空间中创建一个索引段,为索引数据提供空间。 说明:将索引和对应的表分别放在不同硬盘的不同的表空间中能够提高查询的速度,因为Oracle能 够并行读取不同硬盘的数据,这样的查可以避免产生I/O冲突。 用户可以在Oracle中创建多种类型的索引,以适应各种表的特点。按照索引数据的存储方式可 以将索引分为B树索引、位图索引、反向键索引和基于函数的索引;按照索引列的唯一性又可以分为 唯一索引和非唯一索引;按照索引列的个数又可以分为单列索引和复合索引。
上述语句建立一个视图EMP_SALES_VIEW。因为建立视图时没有提供列别名,所以视图的列名分别 为EMPNO、ENAME、JOB和DEPTNO,用户可以通过SELECT语句像查询普通的数据表一样查询视图的信息 ,来看下面的例子。
9.1.2
管理视图
在创建视图后,用户还可以对视图进行管理,主要包括:查看视图的定义信息、修改视图定义、 重新编译视图和删除视图。 (1)查看视图定义 前面介绍过,数据库并不存储视图中数值,而是存储视图的定义信息。用户可以通过查询数据字 典视图USER_VIEWS,已获得视图的定义信息。 【例9-8】 使用desc命令查看USER_VIEWS数据字典的结构,代码如下。 本例运行结果如图9-4所示。
第9 章
本章要求:
视图、索引、序列、同义词

掌握视图对象的创建和管理 掌握索引对象的创建和维护 掌握序列对象的创建和管理 了解同义词对象
第9 章
主要内容
视图、索引、序列、同义词
1.视图对象 2.索引 3.序列 4.同义词 5.综合实例——创建多表连接视图Fra bibliotek9.1
视图对象
9.1.1 创建视图 9.1.2 管理视图
9.1.1
创建视图
创建视图是使用CREATE VIEW语句完成的。为了在当前用户模式中创建视图,要求数据库用户必 须具有CREATE VIEW系统权限;如果要在其它用户模式中创建视图,则用户必须具有CREATE ANY VIEW系统权限,创建视图最基本的语法如下:
create [or replace] view <view_name> [alias[,alias]…) ] as <subquery> [with check option] [constraint constraint_name] [with read only]
建立和规划索引时,必须选择合适的表和列,如果选择的表和列不合适,不仅无法提高查询速 度,反而会极大地降低DML操作的速度,所以建立索引必须要注意以下几点: 索引应该建立在WHERE子句频繁引用表列上,如果在大表上频繁使用某列或某几个列作为条件执 行索引操作,并且检索行数低于总行数15%,那么应该考虑在这些列上建立索引。 如果经常需要基于某列或某几个列执行排序操作,那么在这些列上建立索引可以加快数据排序 速度。 限制表的索引个数。索引主要用于加快查询速度,但会降低DML操作的速度。索引越多,DML操 作速度越慢,尤其会极大地影响INSERT和DELETE操作的速度。因此,规划索引时,必须仔细权 衡查询和DML的需求。 指定索引块空间的使用参数。基于表建立索引时,Oracle会将相应表列数据添加到索引块。为 索引块添加数据时,Oracle会按照PCTFREE参数在索引块上预留部分空间,该预留空间时为将来 的INSERT操作准备的。如果将来在表上执行大量INSERT操作,那么应该在建立索引时设置较大 的PCTFREE。 将表和索引部署到相同的表空间,可以简化表空间的管理;将表和索引部署到不同的表空间, 可以提高访问性能。 当在大表上建立索引时,使用NOLOGGING选项可以最小化重做记录。使用NOLOGGING选项可以节 省重做日志空间、降低索引建立时间、提高索引并行建立的性能。 不要在小表上建立索引。 为了提高多表连接的性能,应该在连接列上建立索引。
【例9-1】 在SCOTT模式下,创建一个查询部门编号为20的视图,代码及运行结果如下。
SQL> connect scott/1qaz2wsx 已连接。 SQL> create or replace view emp_view as 2 select empno,ename,job,deptno 3 from emp 4 where deptno = 20; 视图已创建。
图9-4 USER_VIEWS数据字典的结构 在USER_VIEWS视图中,TEXT列存储了用户视图的定义信息,即构成视图的SELECT语句,来看下面 的例子。
9.2
索引
9.2.1 9.2.2 9.2.3 9.2.4 9.2.5
索引概述 创建索引 修改索引 删除索引 显示索引信息
9.2.1
索引概述
参数说明如下: alias:用于指定视图列的别名, subquery:用于指定视图对应的子查询语句 with check option:该子句用于指定在视图上定义的CHECK约束; with read only:该子句用于定义只读视图。 在创建视图时,如果不提供视图列别名,Oracle会自动使用子查询的列名或列别名;如果视图 子查询包含函数或表达式,则必须定义列别名。下面通过若干示例说明建立和使用视图的方法。 1.简单视图 简单视图是指基于单个表建立的,不包含任何函数、表达式和分组数据的视图,下面来看一个例子。
相关主题