序列和索引

2021年6月24日 3点热度 0条评论 来源: 风火一回

序列

序列是一种用来生成唯一数字值的数据库对象,是一种高效率获得唯一键值的途径。

序列的值由Oracle程序按递增或递减顺序自动生成,通常用来自动生成表的主键值。

序列是独立的数据库对象,并不依附于表,一个序列可以为一个表作主键值,也可以为多个表提供主键值。

 

创建序列

CREATE  SEQUENCE  sequence_name

[START  WITH  i]      

----i开始生成序列,不写默认为从1开始

[INCREMENT  BY  j]   

----步进值为j,不写默认为1j可为正数也可为负数

[MAXVALUE  m |  NOMAXVALUE] 

---设置序列最大值为m或没有最大值,默认无上限

[MINVALUE  n |  NOMINVALUE]  

---设置序列最小值为n或没有最小值,默认无下限

[CYCLE  |  NOCYCLE]

---设置递增到最大值或递减到最小值时,重头循环生成序列,或不循环,默认为不循环

[CACHE  p |  NOCACHE]

---预先取出p个数据到缓存中,以提高生成效率,p默认为20

 

序列的使用:

序列中有两个伪劣,可通过下面两个方法获取:

NEXTVAL:获取序列的下一个值,初始位置在第一行数据之上。每执行一次浪费一个序列值,可能不连续。

 

CURRVAL:获取当前序列的值,不会导致序列值递增。至少要执行一次NEXTVAL才能使用CURRVAL

 

查询序列的第一个值:

SELECT  sequence_name.NEXTVAL  FROM  DUAL

 

查询序列的当前值:

SELECT sequence_name.CURRVAL  FROM  DUAL

 

向表中插入序列值:

INSERT  INTO  table_name(column)

VALUES (sequence_name.NEXTVAL)

 

删除序列:

DROP  SEQUENCE  sequence_name

 

 

索引

索引是一种允许直接访问数据表中某一数据行的树形结构。是独立于表的数据库对象。可以存放在与表不同的表空间中,是为了提高查询效率而引入的。

索引记录中存有索引关键字和指向表中数据的指针(地址)。

索引一旦建立就被Oracle系统自动维护,查询语句中不用指定使用哪个索引,其多IO的操作比表进行IO操作要少很多。

 

索引包含:Index entry headerKey column length Key column value ROWID

ROWID:伪列,唯一标识一条数据记录,可理解为行地址

 

创建索引:

CREATE  [UNIQUE]  INDEX  index_name

ON  table_name(column,column,...)

其中UNIQUE表示唯一索引

 

重建索引:

ALTER  INDEX  index_name  REBUILD

 

删除索引:

DROP  INDEX  index_name

 

注意:

(1)不要在经常做DML操作的表上建立索引

(2)不要在小表上建立索引

(3)删除很少被使用的,不合理的索引

(4)限制表上索引数目,索引并不是越多越好。

    原文作者:风火一回
    原文地址: https://blog.csdn.net/mafan121/article/details/39453551
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。