序列与索引

  • 1.索引(index)
  • 1.索引的创建
  • 2.索引的使用
  • 3.索引的删除
  • 4.索引的优缺点
  • 2.序列(sequence)
  • 1.创建序列
  • 2.序列的使用
  • 3.删除序列


1.索引(index)

为了提高查询效率, 可以建立类似目录的数据库对象, 实现数据快速查询, 这就是索引(Index)

1.索引的创建

  • 自动创建
    Oracle对primary key和unique约束的列, 会自动创建索引.
  • 手动创建
    对于不是primary key和unique约束的列, 如果经常会被查询或用于排序, 可以手动给其创建索引, 例如:
create index idx_sname on student (sname desc);

2.索引的使用

索引被创建后, 查询时会自动生效, 提高查询效率.

3.索引的删除

drop index idx_sname;

4.索引的优缺点

  • 优点
    数据量比较庞大时, 索引可以大大提高查询的效率
  • 缺点
    索引会单独存放, 索引过多会占用大量的存储空间;
    索引会降低DML的效率, 因为数据发生变化时, 还需要重新维护索引;
    对于唯一性不好的数据, 不适合创建索引.

2.序列(sequence)

序列是Oracle中特有的对象, 用于生成一个自动递增的数列. 通常被用来作为主键的值.

1.创建序列

语法:

create sequence seq_name
	[increment by n
	start with n
	maxvalue n|nomaxvalue // 10^27 or -1
	minvalue n|no minvalue
	cycle|nocycle
	cache n|nocache]
  • increment by, 代表每次增长的步长, 默认是1, 可以是负数, 表示每次递减;
  • start with, 从哪个值开始, 默认是1;
  • maxvalue, 序列能到达的最大值, 默认值是nomaxvalue, 此时正数最大值是10^27, 负数最大值是-1;
  • minvalue, 序列能到达的最小值, 默认值是nominvalue, 此时正数的最小值是1, 负数的最小值是-10^26;
  • cycle|nocycle, 表示是否循环. 如果是cycle, 达到最大值是会重新从头开始, 如果是nocycle, 最大值后会报错.
  • cache n|nocache, 表示高速缓存, 可以优化序列, 缓存的默认值是20. nocache表示没有缓存.

创建学生序列

create sequence seq_student;

2.序列的使用

  • nextval(序列的下一个值)
    查看序列的下一个值
select seq_student.nextval from dual;
  • currval(序列的当前值)
    查看序列的当前值
select seq_student.currval from dual;
  • 在插入数据时使用序列
insert into student values (seq_student.nextval, '小红', '女', 19, sysdate, 'hong@sxt.com', 102);

3.删除序列

drop sequence seq_student;