Oracle序列和索引
序列和索引
一.序列
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.什么情况下符合创建索引的条件:
- 在经常需要搜索的列上,可以加快搜索的速度。
- 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构。
- 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度。
- 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是可见的,速度要快。
- 在经常使用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);
什么情况下创建位图索引:
- 列包含较大范围的值
- 列包含大量空值
- 在where子句或者连接条件中频繁使用一个列或者多个列
- 表相当的大,但是预计的多数查询检索的行数占总行数的比例较小,如占百分之十以下。
- 四个索引的总结。
默认的索引类型,平衡树索引,适用于高基数(不同值的程度高)的列。除非有特殊原因需要使用不同的索引类型或功能,否则用正常的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;
Oracle序列和索引的更多相关文章
- oracle 序列 视图 索引 同义词
序列 Oracle 12C 之后,Oracle 之中提供的是一种手工的自动增长列控制,而这样的控制在 Oracle 之中使用序列(对象)完成. 序列的创建: CREATE SEQUENCE 序列名称 ...
- Oracle——序列、索引、同义词
一.常见的数据库对象 二.序列 序列: 可供多个用户用来产生唯一数值的数据库对象 自动提供唯一的数值 共享对象 主要用于提供主键值 将序列值装入内存可以提高访问效率 ①.创建序列 CREATE SEQ ...
- Oracle 学习笔记 12 -- 序列、索引、同义词
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/Topyuluo/article/details/24232449 数据库的对象包含:表.视图.序列. ...
- oracle 触发器,序列,索引
oracle 触发器,序列,索引 --1,触发器 ----trigger /*触发器是一种特殊的存储过程,它与数据表紧密联系,用于保护表中的数据, 当一个定义了特定类型触发器的基表执行插入.修改或删除 ...
- Oracle【序列、索引、视图、分页】
1.Oracle序列语法:create sequence 序列名 特点1:默认是无值,指针指向没有值的位置 特点2:序列名.nextval 每次执行值会自增一次,步长为 1 特点3:序列名.currv ...
- Oracle数据库对象(表空间/同义词/序列/视图/索引)
数据库对象 Oracle数据库对象: 数据库对象是数据库的组成部分,常常用 CREATE 命令进行创建,可以使用 ALTER 命令修改,用 DROP 执行删除操作. 种类: (1)表空间:所有的数据对 ...
- Oracle对象(视图、序列、索引)
数据库对象:表.视图.序列.索引.同义词创建视图:create view 名 as 子查询描述结构:describe 对象名修改视图:create or replace view 名 as 子查询 视 ...
- oracle数据库视图,序列,索引的sql语句查看
1.视图:相当于表,可以用select * from tab;查看所有表和视图: 2.序列和索引可以利用select * from user_indexes 或者user_sequences;进行查看 ...
- oracle序列中cache和nocache
首先我这篇博客的内容是我不知道oracle里的 cache 是什么,结果越查越多... "序列的cache通常为 20,但在需要依据序列值判断创建的先后顺序时必须是 NOCACHE" ...
随机推荐
- 使用oracle11g_instant_client来解决在不安装oracle客户端的情况下连接服务端
一.下载instantclient_11_2,可去oracle官网进行下载. 二.解压缩下载的instantclient_11_2,将instantclient_11_2目录拖放到C:\Program ...
- 【原】iOS中KVC和KVO的区别
在iOS开发中经常会看到KVC和KVO这两个概念,比较可能混淆,特地区分一下 KVC(Key Value Coding) 1> 概述 KVC:Key Value Coding,键值编码,是一种间 ...
- BZOJ1946 : [Ceoi2006]ANTENNA
首先通过随机增量法求出最小覆盖圆,作为答案的上界. 然后二分答案,检验的时候枚举每个点作为原点,求出其他每个点被包括在圆内的角度区间,然后扫描线即可. 时间复杂度$O(Tn^2\log n)$. #i ...
- Facebook React.js库 入门实例教程
作者: 阮一峰 日期: 2015年3月31日 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩 ...
- CODEVS 1817 灾后重建 Label:Floyd || 最短瓶颈路
描述 灾后重建(rebuild) B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两 ...
- NOI 题库 1792
1792 迷宫 描述 一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行.同时当Exten ...
- Android -- 打开某个指定的网站
1. 要使用的代码 Intent intent = new Intent(); intent.setData(Uri.parse(sUrl)); intent.setAction(Intent.ACT ...
- 【JAVA】Quartz中时间表达式的设置
Quartz中时间表达式的设置-----corn表达式 时间格式: <!-- s m h d m w(?) y(?) -->, 分别对应: 秒>分>小时>日>月 ...
- CF #371 (Div. 2) C、map标记
1.CF #371 (Div. 2) C. Sonya and Queries map应用,也可用trie 2.总结:一开始直接用数组遍历,果断T了一发 题意:t个数,奇变1,偶变0,然后与问的 ...
- 腾讯云Linux系统中启动自己安装的tomcat
腾讯云Linux系统中启动自己安装的tomcat 首先通过工具查看一下安装的tomcat的位置 进入命令行之后输入以下指令: 此时,tomcat已经启动了.