序列
序列是一种用来生成唯一数字值的数据库对象,是一种高效率获得唯一键值的途径。
序列的值由Oracle程序按递增或递减顺序自动生成,通常用来自动生成表的主键值。
序列是独立的数据库对象,并不依附于表,一个序列可以为一个表作主键值,也可以为多个表提供主键值。
创建序列
CREATE SEQUENCE sequence_name
[START WITH i]
----从i开始生成序列,不写默认为从1开始
[INCREMENT BY j]
----步进值为j,不写默认为1,j可为正数也可为负数
[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 header、Key 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)限制表上索引数目,索引并不是越多越好。