Oracle数据库管理、应用与开发(十五)

21.1.6 删除视图的操作

                        Drop view 视图名;

21.2 序列

序列是Oracle提供的用于产生一系列唯一数字的数据库对象。

21.2.1 序列的特性

自动提供唯一的数值

共享对象

用于提供主键值(主要特性)

将序列值装入内存可以提高访问效率

21.2.2 创建序列

在用户自己模式中创建序列时,必须具有 create sequence 系统权限。要在其他模式中创建序列,必须具有 create any sequence系统权限。

语法形式:

CREATE SEQUENCE <seq_name>  //创建序列名称

[INCREMENT BY n]  //递增的序列值是n 如果n是正数就递增,如果是负数就递减,默认是1

                            [START WITH n]    //开始值,递增默认是minvalue ,递减是maxvalue

                            [{MAXVALUE n | NOMAXVALUE}]   //最大值

                            [{MINVALUE n | NOMINVALUE}]    //最小值

                            [{CYCLE | NOCYCLE}]       //循环或不循环

                            [{CACHE n | NOCACHE}];           //分配并存入到内存中

NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用

CURRVAL 中存放序列的当前值

NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效

21.2.3 修改序列(修改序列的增量,、最大值、最小值、循环选项或是否装入内存)

         语法形式:

ALTER SEQUENCE <seq_name>  //创建序列名称

[INCREMENT BY n]  //递增的序列值是n 如果n是正数就递增,如果是负数就递减,默认是1

                            [START WITH n]    //开始值,递增默认是minvalue ,递减是maxvalue

                            [{MAXVALUE n | NOMAXVALUE}]   //最大值

                            [{MINVALUE n | NOMINVALUE}]    //最小值

                            [{CYCLE | NOCYCLE}]       //循环或不循环

                            [{CACHE n | NOCACHE}];           //分配并存入到内存中

注意事项:

必须是序列的拥有者或对序列有 ALTER 权限

只有将来的序列值会被改变

改变序列的初始值只能通过删除序列之后重建序列的方法实现

21.2.4 删除序列

使用DROP SEQUENCE 语句删除序列

删除之后,序列不能再次被引用

21.3 同义词

同义词是表、索引、视图等模式对象的一个别名。同义词只是数据库对象的一个替代词,在使同义词时,Oracle会将其翻译为对应的对象的名称。同义词只在Oracle数据库的数据字典中保存其定义描述,因此同义词并不占用任何实际的存储空间。

在开发数据库应用程序时,应当尽量避免直接引用表、视图、或其他数据库的名称,而改用这些对象的同义词。这样可以避免当管理员对数据库对象做出修改和变动之后,必须重新编译应用程序。使用同义词之后,即使引用的对象发生变化,也只需要在数据库中对同义词进行修改,而不必对应用程序做任何改动。

21.3.1 创建同义词的语法形式如下:

CREATE [PUBLIC] SYNONYM synonym_name

FOR schema_object

其中,PUBLIC选项决定创建的同义词是否为公有同义词。

下面通过一个示例来说明如何使用同义词。

select * from vendition.商品信息;

也就是说,必须使用模式名加表名的形式,对表进行限定。

为了简化对该表的访问,可以对该表建立一个相对简单的公有同义词:

 

 

drop public synonym merch_info;

 

二十一、索引

         在关系数据库中,索引是一种与表有关系的数据库结构,它可以使对应于表的SQL语句执行的更快。

         Oracle中的索引可以拥有它自己的存储空间,不必与相关的表处于同一个表空间中。

         Oracle中可以创建多种类型的索引,以适应各种表的特点。常用的索引类型有B树索引、反向引用键索引、位图索引、基于函数的索引、簇索引、全局和局部索引等。

         21.1 B树索引

B树索引是Oracle数据库中最常用的一种索引。当使用CREATE INDEX语句创建索引时,默认创建的索引就是B树索引。

B树索引是按B树结构或使用B树算法组织并存储索引数据的。B树索引就是一棵二叉树,它由根、分支节点和叶子节点三部分构成。其中,根包含指向分支节点的信息,分支节点包含指向下级分支节点和指向叶子节点的信息,叶子节点包含索引列和指向表中每个匹配行的ROWID值。叶子节点是一个双向链表,因此可以对其进行任何方面的范围扫描。

B树索引中所有叶子节点都具有相同的深度,所以不管查询条件如何,查询速度基本相同。另外,B树索引能够适应各种查询条件,包括精确查询、模糊查询和比较查询。



 

B树索引的分类如下所示。

Unique:唯一索引,其索引值不能重复,但允许为NULL。在创建索引时指定UNIQUE关键字可以创建唯一索引。当建立“主键约束条件”时Oracle会自动在相应列上建立唯一索引,主键列不允许为NULL

Non-Unique:非唯一索引,其索引值可以重复,允许为NULL。默认情况下,Oracle创建的索引是非唯一索引。

Reverse Key:反向关键字索引。通过在创建索引时指定“REVERSE”关键字,可以创建反向关键字索引,被索引的每个数据列中的数据都是反向存储的,但仍然保持原来数据列的次序。

         21.2 位图索引

B树索引中,保存的是经排序过的索引列及其对应的ROWID值。但是对于一些基数很小的列来说,这样做并不能显著提高查询的速度。所谓基数,是指某个列可能拥有的不重复值的个数。比如性别列的基数为2(只有男和女)。

因此,对于象性别、婚姻状况、政治面貌等只具有几个固定值的字段而言,如果要建立索引,应该建立位图索引,而不是默认的B树索引。

当创建位图索引时,Oracle会扫描整张表,并为索引列的每个取值建立一个位图。在这个位图中,对表中每一行使用一位(bit,取值为01)来表示该行是否包含该位图的索引列的取值,如果为1,则表示该位对应的ROWID所在的记录包含该位图索引列值。最后通过位图索引中的映射函数完成位到行的ROWID的转换。

         21.3 函数索引

前面的索引都是直接对表中的列创建索引,除此之外,Oracle还可以对包含有列的函数或表达式创建索引,这就是函数索引。

当需要经常访问一些函数或表达式时,可以将其存储在索引中,当下次访问时,由于该值已经计算出来了,因此,可以大大提高那些在WHERE子句中包含该函数或表达式的查询操作的速度。

下面通过一个例子看看函数索引的用法。在SALES表中,TOPIC列的值如果采用首字母大写的方式存储。

         21.4 创建索引

                   创建索引使用CREATE INDEX语句。

在用户自己的方案中创建索引,需要CREATE INDEX系统权限,在其他用户的方案中创建索引则需要CREATE ANY INDEX系统权限。另外,索引需要存储空间,因此,还必须在保存索引的表空间中有配额,或者具有UNLIMITED TABLESPACE系统权限。

CREATE INDEX语句的语法如下:

CREATE [UNIQUE] | [BITMAP] INDEX index_name

ON table_name([column1 [ASC|DESC],column2

[ASC|DESC],…] | [express])

[TABLESPACE tablespace_name]

[PCTFREE n1]

[STORAGE (INITIAL n2)]

[NOLOGGING]

[NOLINE]

[NOSORT];

其中:

UNIQUE:表示唯一索引,默认情况下,不使用该选项。

BITMAP:表示创建位图索引,默认情况下,不使用该选项。

PCTFREE:指定索引在数据块中的空闲空间。对于经常插入数据的表,应该为表中索引指定一个较大的空闲空间。

NOLOGGING:表示在创建索引的过程中不产生任何重做日志信息。默认情况下,不使用该选项。

ONLINE:表示在创建或重建索引时,允许对表进行DML操作。默认情况下,不使用该选项。

NOSORT:默认情况下,不使用该选项。则Oracle在创建索引时对表中记录进行排序。如果表中数据已经是按该索引顺序排列的,则可以使用该选项。

可以在一个表上创建多个索引,但这些索引的列的组合必须不同。如下列的索引是合法的。

CREATE INDEX idx1 ON SALES(ID,TOPIC)
CREATE INDEX idx2 ON SALES(TOPIC,ID)

 

其中,idx1idx2索引都使用了IDTOPIC列,但由于顺序不同,因此是合法的。

21.4.1 创建B树索引

B树索引是Oracle默认的索引类型,当在WHERE子句中经常要引用某些列时,应该在这些列上创建索引。

例如,经常需要在SALES表的TOPIC列上按标题查询,就可以在TOPIC列上建立B树索引。

21.4.2 创建位图索引

位图索引适用于表中的列具有较小的基数时,在创建位图索引时,必须在CREATE TABLE语句中显式地指定BITMAP关键字。例如,下面的语句在“商品信息”表的“供应商编号”和“产地”列上创建位图索引Merch_Bitmap_Index

 

Create bitmap index Merch_bitmap_index ON 商品信息(供应商编号,产地) tablespace users;

B树索引类似,在创建位图索引时,也可以通过STORAGE子句来设置索引的存储参数。

21.4.2 创建反向键索引

创建返乡索引键时,必须在Create index语句中指定关键字REVERSE,反向键索引适用于严格排序的列。例如,下面的语句可以为“商品信息”表的“商品编号”列创建反向键索引:

Create index Merch_Reverse_index ON 商品信息(商品编号) reverse
PCTFREE 30
TABLESPACE users; 

              21.4.3 创建基于函数的索引

创建基于函数的索引,可以提高当在查询条件中使用函数和表达式时查询的执行速度。

提示:在创建基于函数的索引时,不仅可以使用SQL函数,还可以使用用户自定义函数。

例如:

Create index function_index on 入库单信息(to_char(‘入库日期’,’yyyy-mm-dd’))
Tablespase users;
 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值