序列、索引、同义词

序列

概念:序列是按照一定规则能自动增加/减少数字的一种数据库对象。
用法:通常用序列自动生成主键值。
语法:

CREATE SEQUENCE [schema.]sequencename [INCREMENT BY n] [START WITH n] [MAXVALUE n | NOMAXVALUE] [MINVALUE n | NOMINVALUE] [CYCLE | NOCYCLE] [CACHE n | NOCACHE]; 

–sequencename:序列对象的名字

–INCREMENT BY n:序列连续两个值之间的间隔n,默认为1。

–START WITH n :序列起始值n,该项省略,起始值为1

–MAXVALUE n :序列最大值;NOMAXVALUE :指定序列无最大值

–MINVALUE n:序列最小值;NOMINVALUE:指定序列无最小值

–CYCLE|NOCYCLE:表示序列在达到最大值或最小值之后是否继续产生序列值, NOCYLE表示不再产生,NOCYLE是默认选项。

–CACHE n|NOCACHE:表示序列值被服务器预先分配并存储在内存中,NOCACHE表示不预先分配并存储,CACHE 20是默认选项

NEXTVAL和CURRVAL伪列

CURRVAL:表示序列返回的 当前值;
NEXTVAL:表示序列返回的下一个值;
注:
CURRVAL在被引用之前,必须先使用NEXTVAL来产生一个序列值;
可用语句序列名.CURRVAL或序列名.NEXTVAL来访问序列;

以下情况不能使用NEXTVAL和CURRVAL:

  1. 在视图的SELECT列表中

  2. 包含DISTINCT关键字的SELECT语句中

  3. 含有GROUP BY, HAVING, ORDER BY子句的SELECT语句中

  4. SELECT, DELETE, UPDATE 语句的子查询中

  5. 含有DEFAULT表达式的CREATE TABLE、ALTER TABLE语句中

    序列的创建及使用

    例如:
    创建序列student_seq:

    CREATE SEQUENCE student_seq//创建序列名为student_seq
    START WITH 10000 //从10000开始
    INCREMENT BY 1;//每次增长1
    使用序列student_seq生成student表中sid列插入值:

    INSERT INTO student
    VALUES (student_seq.NEXTVAL, ‘Scott’, ‘Computer Science’, 11);
    查看student_seq序列当前值:

    SELECT student_seq.CURRVAL FROM dual;

    修改序列

    和创建序列一样,不过在前面加了关键词ALTER

    ALTER SEQUENCE test_seq
    INCREMENT BY 4 ——序列每次增加4
    MAXVALUE 1000 ——序列最大值1000
    NOCACHE;——不设定缓存

    删除序列

    DROP SEQUENCE [schema.]sequencename;

    ROWID

    功能:快速定位记录,使用ROWID检索及操作数据,效率最快。

    索引

    概念:是对数据库表中一个或多个列的值进行排序的一种数据库对象。
    功能:可以加速对表的查询速度;
    单列索引:索引建立在表中的某一列上
    复合索引:索引建立在表中某几列的组合上

    创建索引

    CREATE INDEX indexname
    ON table (column[, column]…);

    适合创建索引的情况

  6. 表数据量很大

  7. 要查询的结果集在2%-4%左右

  8. 经常用来做WHERE条件中的列或者多表连接的列

  9. 查询列的数据范围分布很广

  10. 查询列中包含大量的NULL值,因为空值不包含在索引中

    不适合创建索引的情况

  11. 数据量很小的表

  12. 在查询中不常用来作为查询条件的列

  13. 频繁更新的表

  14. 索引列作为表达式的一部分被使用时,比如常查询的条件是SALARY*12,此时在SALARY列上创建索引是没有效果的

  15. 查询条件中有单行函数时,用不上索引

    索引缺点

  16. 占用空间

  17. 降低DML的操作速度;

    删除索引

    DROP INDEX index;

    同义词

    概念:是指向数据库对象(如:表、视图、序列、存储过程等)的数据库指针。

    同义词的创建

    CREATE [PUBLIC] SYNONYM 同义词
    FOR [schema.]对象名;

    同义词的删除

    CREATE SYNONYM s_emp
    FOR hr.employees;