Oracle序列和索引

序列和索引sql

一.序列数据库

1.序列的概念:缓存

  序列(Sequence)是用来生成连续的整数数据的对象。它经常用来做为主键的增加列,能够升序,也能够降序。函数

2.建立序列:性能

  语法:建立序列                                              语法解析:大数据

  CREATE SEQUENCE sequence_name     优化

  [STRAT WITH num]             START WITH:从某一个整数开始,升序默认为1,降序默认为-1.spa

  [INCREMENT BY increment]         INCREMENT BY:增加数。若是是正数则升序生成,负数则降序生成。升序默认为1,降序默认为-1。对象

  [MAXVALUE num | NOMAXVALUE]      MAXVALUE:最大值。  NOMAXVALUE:最大值的默认选项,升序为,10的27次幂,降序默认值为-1。blog

  [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.什么状况下符合建立索引的条件:

  • 在常常须要搜索的列上,能够加快搜索的速度。
  • 在做为主键的列上,强制该列的惟一性和组织表中数据的排列结构。
  • 在常常用在链接的列上,这些列主要是一些外键,能够加快链接的速度。
  • 在常常须要根据范围进行搜索的列上建立索引,由于索引已经排序,其指定的范围是可见的,速度要快。
  • 在常用where子句的列上面建立索引,加快条件的判断速度。

3.什么状况下不该该建立索引:

  • 不多查询的列,只是做为参考的列,不该该建立索引。
  • 对于那些数值不多的列。
  • 对于那些定义为blob数据类型(大数据)的列。
  • 常常增删改的列,建立索引需谨慎。

4.索引的优势。

  • 经过建立惟一性索引,能够保证数据库表中没一行数据的惟一性。
  • 能够大大的加快数据的检索速度,也是建立索引的最主要的缘由。
  • 能够加快表和表的链接,特别是在实现数据的参照完整性方面特别有意义。
  • 在使用分组和排序子句进行数据检索时,一样能够显著减小查询中分组和排序的时间。
  • 经过使用检索,能够在查询的过程当中,使用优化隐藏器,提升系统的性能。

5.索引的缺点。

  • 建立索引和维护索引要耗费时间,这种时间随着数据量的增长而增长。
  • 索引须要占物理空间,除了数据表占数据空间以外,每个索引还要占必定的物理空间。
  • 当对表中的数据进行增删改的时候,索引也要动态的维护,这样就下降了数据的维护速度。

6.建立索引。

  •   建立B-Tree索引:

  语法:                                语法分析:

  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);

 

  什么状况下建立位图索引:

  1. 列包含较大范围的值
  2. 列包含大量空值
  3. 在where子句或者链接条件中频繁使用一个列或者多个列
  4. 表至关的大,可是预计的多数查询检索的行数占总行数的比例较小,如占百分之十如下。
  •     四个索引的总结。
  B树

      默认的索引类型,平衡树索引,适用于高基数(不一样值的程度高)的列。除非有特殊缘由须要使用不一样的索引类型或功能,不然用正常的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;
相关文章
相关标签/搜索