序列:
自动产生的唯一值;
一个共享的对象;
典型的用法是作为主键的值;
insert into 给主键提供值。
替代了应用的代码;
通过将序列CACHE(预先生成一部分序列号,放入到内存中)到内存中,可以加速对序列的访问。
CREATE SEQUENCE sequence_name
[increment by n]//步长
[start with n]//起始点
[maxvalue n/nomaxvalue]//递增
[minvalue n/nominvalue]//递减
[cycle/nocycle]//循环
[cache n/nocache];//n为预先生成序列号的个数,默认为20。
查询序列:
user_sequences
last_number 序列将要产生的下一个号是多少;
select sequence_name,min_value,max_value,increment_by last_number from user_sequences;
伪列:NEXTVAL 引用下一个可用的序列值,不同的用户每次引用都会获得一个唯一的值。
CURRVAL 得到当前的值(刚被领走的号)。
在CURRVAL执行前必须先通过NEXTVAL得到一个初始的值。
序列名.NEXTVAL/CURRVAL
序列发生间隙是正常的,保证唯一即可。
序列的修改:
ALTER SEQUENCE sequence_name
increment by
maxvalue
cycle
cache;
start with 不能修改。
删除序列:
drop SEQUENCE sequence_name;
索引:
一个方案中的对象;
被ORACLE服务器用来加速对表的查询;
通过使用快速路径访问方法快速定位数据;
与表独立存放;
被ORACLE服务器使用和维护。
一定是 WHERE 条件的才有可能使用索引。
手动创建索引:
CREATE INDEX index_name on table_name (col_name);
考虑创建索引的情况:
*、包含了大量不同值的列;
*、包含了大量空值的列;
*、一个或者多个列经常被一起出现在 WHERE 条件中或者作为连接的条件出现;
*、表的数据量很大,而且对表的查询经常是得到表中数据的2%到4%(少量数据).
不应该创建索引的情况:
*、一个很小的表;
*、列很少被用于查询的条件;
*、表上的大多数查询是得到大量数据的;
*、表中的数据经常发生变动;
*、要被索引的列被作为条件表达式的一部分。
查看:
user_indexes得到索引的定义和唯一性。
user_ind_columns 得到索引的名称,表名和列名。
select ic.index_name,ic.column_name,ic.column_position,
ic.uniquenes
from user_indexes ix,user_ind_columns ic
where ic.index_name=ix.index_name and ic.table_name='table_name';
删除索引:
DROP INDEX index_name;
为了删除索引,必须拥有索引或者拥有DROP ANY INDEX 权限。
posted on 2008-07-25 01:19
惠子 阅读(167)
评论(0) 编辑 收藏 引用