序列与索引
- 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;