标签:
序列和索引
一.序列
1.序列的概念:
序列(Sequence)是用来生成连续的整数数据的对象。它常常用来作为主键的增长列,可以升序,也可以降序。
2.创建序列:
语法:创建序列 语法解析:
CREATE SEQUENCE sequence_name
[STRAT WITH num] START WITH:从某一个整数开始,升序默认为1,降序默认为-1.
[INCREMENT BY increment] INCREMENT BY:增长数。如果是正数则升序生成,负数则降序生成。升序默认为1,降序默认为-1。
[MAXVALUE num | NOMAXVALUE] MAXVALUE:最大值。 NOMAXVALUE:最大值的默认选项,升序为,10的27次幂,降序默认值为-1。
[MINVALUE num | NOMINVALUE] MINVALUE:最小值。 NOMINVALUE:最小值的默认选项,升序为1,降序为-10的26次幂。
[CYCLE | NOCYCLE] CYCLE:表示升序达到最大值的时候,从最小值开始。如果是降序的话,达到最小值后,从最大值开始。
NOCYCLE:表示达到最大或最小值时,不重新开始。(会报错)。默认为NOCYCLE。
[CACHE num | NOCACHE] CACHE:使用CACHE选项时,该序列会根据序列规则生成一组序列号。保留在内存中,当使用下一个序列号时,可以更快的响应。
当内存中的序列号用完时,系统会再次生成一组序列号保存在缓存中,这样可以提高生成序列号的效率。ORACLE会默认生成
20个序列号。
NOCACHE:不预先在内存中生成序列号。
示例:创建一个从5开始,每次增长3的序列,要求最大值为1000,CYCLE,缓存区有30个预选序列号。
create sequence aa start with 5 increment by 3 maxvalue 1000 cycle cache 30;
3.利用序列:
序列创建之后,我们可以通过序列对象的CURRVAL和NEXTVAL两个‘伪列’来访问序列的当前值和下一个值。
select aa.nextval from dual;
select aa.currval from dual;
注意:当你刚创建好序列时,不能直接查看currval当前值,会报错,因为你还没有从序列中取值,所以currval是不被识别的。先取值(nextval,第一次为5),然后就可以查看当前值了。
我先创建一个表:
create table bb( id int primary key name varchar2(30); );
利用上个序列插入给id插入数据:
insert into bb values(aa.nextval,‘MIKE‘);
插入了id为5,name为MIKE的一条数据。
4.序列的删除和修改:
alter sequence aa maxvalue 200;
修改aa序列的最大值为200。其他属性照例即可。
drop sequence aa;
二:索引
1.索引的概念:
索引是与表关联的可选结构。可以创建索引加快对表执行SQL语句的速度。就像书的索引可以帮助我们更快的查找信息一样,Oracle中的索引也提供了一种更快的访问数据的途径。
2.什么情况下符合创建索引的条件:
3.什么情况下不应该创建索引:
4.索引的优点。
5.索引的缺点。
6.创建索引。
语法: 语法分析:
CREATE [UNIQUE] INDEX index_name ON UNIQUE:意味着索引列中的值必须是唯一的。
table_name(column_name,[column_name...]) index_name:索引的名称。
TABLESPACE tab_space; table_name:需要加索引的表名。
column_name:需要加索引的列(可以加多个列,这样的索引称为符合索引。)
tab_space:存贮索引的表空间。如果不指定的话,那么索引将会存贮在用户默认的表空间下。(出于性能原因,可以将索引存贮的表
空间和实际表存贮的表空间分开。管理员应该为表和索引创建不同的表空间。)
示例:为emp员工表的员工号和薪水创建索引。
create index empno_sal_index on emp(empno,sal);
注意:如果你所要创建的索引的列的值有重复的值,那么就不能创建唯一索引。
如果我现在已经创建好了一个ename(员工姓名)列的索引,而现在想实现这样的一条查询语句。
select lower(ename) from emp;
那么这条语句虽然可以出来结果,但是却没有用到索引。这时我们就需要创建函数索引如下:
create index ename_index on emp(lower(ename));
create bitmap index e_i on emp(ename);
什么情况下创建位图索引:
默认的索引类型,平衡树索引,适用于高基数(不同值的程度高)的列。除非有特殊原因需要使用不同的索引类型或功能,否则用正常的B树索引即可.
B树索引的一种形式,用于强制执行列值的唯一性.经常与主键和唯一键约束一起使用,但也可以独立于约束而创建
对于包含低基数列以及在SQL语句的WHERE子句中使用许多AND或OR运算符的数据仓库环境,非常适合使用这种索引。
适用于应用了SQL函数的列。可与B树索引类型或位图索引类型结合使用
7.查看索引信息。
SELECT index_name, table_name, uniqueness, status FROM user_indexes WHERE table_name IN (‘EMP‘);
这个语句实现了查询索引名字,索引的表名,是否是唯一索引,索引的状态(是否可用)。结果截图如下:
INVALID的话就是当前索引不可用。
8.修改、删除索引。
alter index ename_index rename to ei;
更改索引名,其他修改格式都是如此。
drop index ei;
标签:
原文地址:http://www.cnblogs.com/bzx888/p/4807170.html