ORACLE对象-高级

一、视图

(一)什么是视图

ORACLE对象-高级(视图、序列、索引)_SQL


视图和表的区别:

视图是实体表的映射,视图和实体表区别就是于视图中没有真实的数据存在。

视图中存储的是SQL语句

什么时候使用视图:

1.为了安全,通过视图,可以异常敏感数据,不对外开放,(你可以隐藏表中不想给别人看的数据)

2.保存复杂sql的查询结果,方便人员调用

注意:在企业中,你查询的对象(表)他可能不是一张的表,可能是视图;你看到的视图的字段可能也不是真实的字段。

(二)案例

1.视图的创建与使用
需求:创建视图 :业主类型为1的业主信息
语句:

create or replace view view_owners1 as
select * from T_OWNERS where ownertypeid=1

利用该视图进行查询

select * from view_owners1 where addressid=1;

删除视图

drop view name

使用视图就跟使用表一样。

二、序列

(一)什么是序列

序列是ORACLE提供的用于产生一系列唯一数字的数据库对象。

ORACLE对象-高级(视图、序列、索引)_视图序列索引_02

(二)创建与使用序列

创建序列语法:

CREATE  SEQUENCE  序列名
[START WITH 起始数]
[INCREMENT BY 增长量]
[MAXVALUE 最大值]
[MINVALUE 最小值]

通过序列的伪列来访问序列的值
NEXTVAL 返回序列的下一个值
CURRVAL 返回序列的当前值
注意:我们在刚建立序列后,无法提取当前值,只有先提取下一个值时才能再次提取当前值。
提取下一个值

select 序列名称.nextval from dual

提取当前值

select 序列名称.currval from dual

(三)删除序列

DROP SEQUENCE 序列名称;
--创建序列:自增长策略
create sequence seq_stuno --从1开始,每次递增1,一直到number的最大值
start with 2 --起始值
increment by 2 --步长
minvalue 2 --最小值
maxvalue 9999999 --最大值

--获取序列
--获取序列的下一个值
select seq_stuno.nextval from dual;
--获取序列的当前值
--序列不连续的
select seq_stuno.currval from dual;--6

--作为主键如何使用呢?
insert into t_temp values(seq_stuno.nextval,null);

select * from t_temp;

--删除序列
drop sequence seq_stuno;

三、索引(重要)

(一)什么是索引

索引是用于加速数据存取的数据对象。合理的使用索引可以大大降低i/o 次数,从而提高数据访问性能。
索引是需要占据存储空间的,也可以理解为是一种特殊的数据。形式类似于下图的一棵“树”,而树的节点存储的就是每条记录的物理地址,也就是我们提到的伪列(ROWID)

为什么要使用索引?索引好处是什么?

原理

ORACLE对象-高级(视图、序列、索引)_视图序列索引_03

(二)普通索引

语法:

create index 索引名称 on 表名(列名);

需求:我们经常要根据业主名称搜索业主信息,所以我们基于业主表的name字段来建立索引。语句如下:

create index index_owners_name on T_OWNERS(name)

索引性能测试:
创建一个两个字段的表

create table T_INDEXTEST (
ID NUMBER,
NAME VARCHAR2(30)
);

编写PL/SQL 插入100万条记录( 大概800Mb,你的表空间要有自增,时间5分钟左右看电脑性能)这只是测试查询性能 选择性做 不做也行 知道结果就好

BEGIN
FOR i in 1..1000000
loop
INSERT INTO T_INDEXTEST VALUES(i,'AA'||i);
end loop;
commit;
END;

创建完数据后,根据name列创建索引

CREATE INDEX INDEX_TESTINDEX on T_INDEXTEST(name)

执行下面两句SQL执行

SELECT * from T_INDEXTEST where ID=765432;
SELECT * from T_INDEXTEST where NAME='AA765432';

我们会发现根据name查询所用的时间会比根据id查询所用的时间要短

--查
--建立索引前的时间:
select * from t_temp where name='A789456';--31

select * from t_temp where id='789456';--31

select * from t_temp where rowid='AAADhPAAIAAAAkYAAf';--0

--建立索引
create index index_temp_name on t_temp(name);

select * from t_temp where name='A789456';--0

select * from t_temp where id='789456';--31

select * from t_temp where rowid='AAADhPAAIAAAAkYAAf';--0

祝你幸福

送你一首歌:《In the eyes》江映东​​

附图:1月11日,在北京航天飞行控制中心大屏幕上拍摄的着陆器(右)和巡视器互拍画面。新华社图

ORACLE对象-高级(视图、序列、索引)_视图序列索引_04