首页 > Oracle数据库基本操作(二) —— 视图、序列、索引、同义词

Oracle数据库基本操作(二) —— 视图、序列、索引、同义词

一、视图(Views)与 同义词

  1、视图:实际上是对查询结果集的封装,视图本身不存储任何数据,所有的数据都存放在原来的表中;

     在逻辑上可以把视图看作是一张表

  2、作用:

    • 封装查询语句,简化复杂的查询需求
    • 屏蔽表中的细节

  3、语法: 

create [or replace] view 视图的名称 as 查询语句 [with read only]

  4、视图和同义词:

    • 屏蔽了查询过程步骤
    • 屏蔽了真实的表名 增加了代码被破解的难度

  5、示例:

select * from emp;

-- 封装成一个视图: 获取10号部门的员工信息
create or replace view view_test1 as select * from emp where deptno=10;
select * from view_test1;

-- 简化查询语句
CREATE VIEW view_test2 AS SELECTSUM(cc) total,SUM(CASE yy WHEN '1980' THEN cc END) "1980",SUM(CASE yy WHEN '1981' THEN cc END) "1981",SUM(CASE yy WHEN '1982' THEN cc END) "1982",SUM(CASE yy WHEN '1987' THEN cc END) "1987"
FROM(SELECTTO_CHAR(HIREDATE, 'YYYY') YY,COUNT(*) CCFROMEMPGROUP BYTO_CHAR(HIREDATE, 'YYYY')) TT ;
select * from view_test2;

-- 屏蔽表中的细节
create or replace view view_test3 as select ename,job,mgr,hiredate from emp;
-- 通过视图修改数据
update view_test3 set ename='SMITH' where ename='SMI%TH';
-- 创建只读视图
create view view_test4 as select ename,job,mgr,hiredate from emp with read only;
-- 报错 ORA-01733: virtual column not allowed here
update view_test4 set ename='SMITH2' where ename='SMITH';
-- 同义词: 相当于是取了一个别名
create synonym yuangong for view_test3;
select * from yuangong;

二、序列

  序列: 1,2,3,4,5,6,7....

  作用: 模拟类似mysql中auto_increment自动增长的编号

  1、语法:

create sequence 序列名称
start with 从几开始
increment by 每次递增多少
minvalue | nominvalue
maxvalue | nomaxvalue
cycle | nocycle
cache 缓存几个数 31,2,34,5,6
-- currval:序列当前取到哪个值,必须是调用了一次nextval之后才能正常使用
-- nextval:序列中的下一个值
-- 注意:序列中的值,一旦被取过,无论回滚/发生异常,序列都是永不回头向下递增的

  2、使用示例

-- 1,2,3,4,5,6,1,2,3,4,5,6
create sequence seq_test01
start with 1
minvalue 1
maxvalue 6
cycle
cache 3;-- 需先执行nextval语句后才有效 
select seq_test01.currval from dual;
select seq_test01.nextval from dual;-- 开发过程,通常写法如下:
create sequence seq_test02;
-- 建表 
create table louceng(lou number primary key
);
-- 执行两次 
insert into louceng values(seq_test02.nextval);
-- 1  2
select seq_test02.currval from dual;select * from louceng;

三、索引

3.1 索引概述   

  索引:索引是一种已经排好序的帮助数据库快速查找数据的数据结构,主要是用来帮助数据库快速的找到数据 相当于一本书的目录。

   语法: 

create index 索引名称 on 表名(列名1,列名2....);

  主键约束: 自带唯一索引

  唯一约束: 自带唯一索引

3.2 索引作用示例

 1 -- 创建测试数据500万
 2 -- 创建一张表
 3 create table wbw(
 4     c1 number primary key,
 5     c2 varchar2(20),
 6     c3 varchar2(20)
 7 );
 8 -- 插入500万条记录
 9 create sequence seq_wbw;
10 
11 -- PLSQL中的循环(283s) 
12 declare
13 
14 begin 
15    for i in 1..5000000 loop
16     insert into wbw values(seq_wbw.nextval,'c2:'||i,'c3:'||i);
17    end loop;
18    commit;
19 end;
20 
21 -- 在没有创建索引的情况下(2.37s)
22 select * from wbw where c2='c2:4000000';
23 
24 -- 0.00s
25 select * from wbw where c1=4000000; 
26 
27 -- 创建索引(35.77s)
28 create index wbw_c2 on wbw(c2);
29 -- 索引列下 0.15s 
30 select * from wbw where c2='c2:4000000';
31 -- 非索引列下 2.38s
32 select * from wbw where c3='c3:4000000';

3.3 索引扩展

  3.3.1 索引优化概述

  SQL语句的执行计划(SQL语句分析的时候): 将SQL语句发送给数据库, 数据库分析执行这条语句需要经历哪些步骤,消耗多少资源

  SQL优化的步骤:

1.找到需要优化的语句

2.通过执行计划去分析SQL语句

3.确定优化方案

  索引的原理: 索引是一种已经排好序的帮助数据库快速查找数据的数据结构 BTree : B树, Balance, 平衡多路查找树

  索引的利弊:

    好处: 提高查询的效率

    缺点: 占资源,反向影响增删改的效率

  什么时候创建索引?

1.数据量比较大时候

2.哪些列经常作为查询的条件

  3.3.2 使用示例:

 1 -- 没有创建多列索引的情况下  0.50s
 2 select * from wbw where c2='c2:4000001' and  c3='c3:4000001';
 3 
 4 -- 创建索引(41.43s)
 5 create index wbw_c23 on wbw(c2,c3);
 6 
 7 
 8 -- 创建多列索引的情况下 0.25s
 9 select * from wbw where c2='c2:4000001' and  c3='c3:4000001';
10 -- 1.80s
11 select * from wbw where c3='c3:4000001';

  3.3.3 执行计划图解

 

转载于:https://www.cnblogs.com/gdwkong/p/8504239.html

更多相关:

  • explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 虽然这篇文章我写的很长,但看起来真的不会困啊,真的都是干货啊!!!! 先解析一条sql语句,看出现什么内容 EXPLAIN SELECT s.uid,s.username,s.name,f.email,f.mob...

  • 重建索引  如果表中记录频繁地被删除或插入,尽管表中的记录总量保持不变,索引空间的使用量会不断增加。虽然记录从索引中被删除,但是该记录索引项的使用空间不能被重新使用。因此,如果表变化不定,索引空间量会不断增加,不论表中记录数量是否增加,这是因为索引中无效空间会增加。 要回收那些曾被删除记录使用的空间,需要使用Alter index r...

  • 其实SQL能力很差劲,简单查询还成,复杂查询以及优化,基本脑子里没有概念。了解一下概念,然后打算找本理论书好好看看。 先到处找了些优化的sql,整理出来,记录一下。     1、对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引。     2、应尽量避免在where 子句中对字段进行n...

  • 原文地址:oracle索引的简单总结作者:kindle一、索引的概念:     数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。 二、索引的特点:     1.索引可以加快数据库的检索速度     2.索引降低...

  • select {appearance: none;/*隐藏原生select下拉框的向下箭头▼*/ }...

  • 一、基础1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:mssq...

  • 一、介绍   GreenPlum分布式数据仓库,大规模并行计算技术。  无共享/MPP核心架构  Greenplum数据库软件将数据平均分布到系统的所有节点服务器上,所以节点存储每张表或表分区的部分行,所有数据加载和查询都是自动在各个节点服务器上并行运行,并且该架构支持扩展到上万个节点。 混合的存储和执行(按列或按行)  Greenp...

  • from selenium.webdriver.support.ui import Select Select(d.find_element_by_id(u'key_开户行')).first_selected_option.text 转载于:https://www.cnblogs.com/paisen/p/3669272.html...

  • 我们都知道面试的时候通常都会考数据库部分的知识,所以在此整理了下我们常用的面试中常用的一些查询语句SQL,本人测试数据库为SQL Server2008 首先在数据库中建立一个测试库,此处用DavidTest代替 数据表与相应测试数据 USE [DavidTest] GO /****** Object: Table [dbo].[T...

  • 数据分析过程中,我们经常可以看到提数的SQL语句,了解SQL常用的基础查询语句,是检验提数逻辑是否正确的途径之一,并且也能更方便使用SMART BI数据分析工具。今天就让小编带大家走进SQL基础查询的世界吧~1、查询单个字段:语法:SELECT 字段名 FROM 表名举例:SELECT first_name FROM employ...

  •   SELECT * FROM tableSELECT * FROM table WHERE name = '强哥'SELECT * FROM table ORDER BY updateTime DESC...

  • 使用 OpenRowSet 和 OpenDataSource 访问 Excel 97-2007 测试文件:D:97-2003.xls和D:2007.xlsx,两个文件的内容是一模一样的。 测试环境:SQL Server 2000 / 2005。 -------------------------------------------...

  • exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed Queries',1 reconfigure SELECT * INTO tmp_asset FROM OPENROWSET('Microsof...

  • select b.*,(select count(a.id) from td_product a where a.protypeid=b.id) num from td_protype b 转载于:https://www.cnblogs.com/shanlin/archive/2011/09/27/2192725.html...