#序列
序列的概念
序列是一种用于产生唯一数字列值的数据库对象,一般使用序列自动地生成主码值或唯一键值,序列可以是升序或降序。
序列特点:
-
-
- 可以自动产生唯一数值;
- 可被多个用户共享;
- 典型应用是生成主键值,用于标识记录的唯一性;
- 使用缓存加速序列的访问速度。
-
#创建序列语法
创建序列,必须有CREATE SEQUENCE或CREATE ANY SEQUENCE权限。
序列被创建后,可以通过查询数据字典视图USER_SEQUENCES查看序列信息。
创建序列
-
- sequence 序列产生器的名称
- INCREMENT BY n 指定序列值之间的间隔n,如果省略该项间隔为1
- START WITH n 指定起始序列值n,如果该项省略起始值为1
- MAXVALUE n 指定最大序列值
- NOMAXVALUE 指定最大序列值为10的27次方,而降序的最大值为-1,这是一默认选项
- MINVALUE n 指定最小序列值
- NOMINVALUE 指定升序最小序列值为1,而降序最小序列值为负10的26次方,这是一默认选项
- CYCLE | NOCYCLE 指定序列值在达到最大值或最小值之后继续产生序列值,NOCYLE表示不再产生,NOCYLE是默认选项。
- CACHE n | NOCACHE 指定序列值被Oracle服务器预先分配并存储在内存中,NOCACHE表示不预先分配并存储,CACHE 20是默认选项
NEXTVAL和CURRVAL伪列
可用语句sequence_name.CURRVAL和sequence_name.NEXTVAL来访问序列;
-
-
- CURRVAL:获取当前序列值;
- NEXTVAL:返回下一个有效的序列值;
- CURRVAL和NEXTVAL都返回NUMBER值;
- CURRVAL能被引用之前,必须使用NEXTVAL产生一个序列值;
-
NEXTVAL和CURRVAL伪列
您可以在下列情况使用NEXTVAL 和 CURRVAL:
-
-
- SELECT 语句的SELECT列表中,但不包括子查询中的SELECT语句
- INSERT 语句中的子查询SELECT列表中
- INSERT 语句的VALUES子句中
- UPDATE 语句的SET子句中
-
下列情况不能使用 NEXTVAL 和 CURRVAL:
-
-
- 在视图的SELECT列表中
- 包含DISTINCT关键字的SELECT语句中
- 含有 GROUP BY, HAVING, ORDER BY子句的SELECT语句中
- SELECT, DELETE, UPDATE 语句的子查询中
- 含有 DEFAULT表达式的 CREATE TABLE、 ALTER TABLE 语句中
-
#创建序列
#修改序列
#删除序列
#索引
索引的概念
索引是: 方案(schema)中的一个数据库对象;
在数据库中,用来加速对表的查询速度;
通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O;
与表独立存放,但需要依附于表,是在表的基础上创建的;
由 Oracle数据库自动维护;
(注: 如果您删除某个表,那么和该表相关的索引也被删除。)
#创建索引
创建索引有两种方式:自动创建、手动创建
自动创建: 当在表上定义一个PRIMARY KEY 或者UNIQUE 约束条件时,Oracle数据库自动创建一个对应的唯一索引;
手动创建: 用户可以创建索引以加速查询,在需要创建索引的字段上创建需要的索引。
#测试索引
适合创建索引情况
-
- 查询列的数据范围很广泛;
- 查询列中包含大量的NULL值, ,因为空值不包含在索引中;
- WHERE条件中的列或者多表连接的列适合创建索引;
- 欲查询的表数据量很大,而且大多数的查询得到结果集的数量占总记录量的2%~4%;
- 过多的索引并不总是更有好处,过多的索引并不意味着更快的查询速度,每一次对含有索引的表进行DML操作就意味着索引必须更新,过多的索引会导致在DML操作后Oracle服务器要花费更多的时间在索引的更新上。
不适合创建索引的情况
-
- 很小数据量的表;
- 在查询中不常用来作为查询条件的列;
- 查询最终得到的结果集很大;
- 频繁更新的表(索引对于DML操作是有部分负面影响的) ;
- 索引列作为表达式的一部分被使用时(比如常查询的条件是SALARY*12,此时在SALARY列上创建索引是没有效果的) ;
#删除索引
删除索引后,索引中的数据及定义被删除,索引所占的数据空间被释放,但表中的数据仍然存在。
常用与索引相关的数据字典视图有:
-
-
- USER_INDEXES:用户的索引对象的定义,包含索引的名字和索引的一些相关属性(比如唯一性等)
- USER_IND_COLUMNS:用户索引对象的列的定义信息,会列出索引名字,表名字,和列的名字等。
-
##本章重点总结
- 理解序列、索引对象的作用及概念;
- 掌握序列的创建及使用方法;
- 掌握索引的创建及使用方法;
- 掌握何时应该创建索引;
原文地址:https://www.cnblogs.com/destinywxy/p/9341409.html