A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

同学们,今天讲解了视图、序列、同义词和索引,重在理解每部分的功能。

今日需要掌握的有:
  • 掌握视图功能,注意与物化视图的区别
  • 掌握基本序列的使用
  • 了解同义词的使用
  • 掌握普通索引的使用

请同学们按照如上要求,用自己的话术总结今日所学每部分的功能。

8 个回复

倒序浏览
陈强
Oracle的第三天;
今天的重点内容主要是视图和索引部分,当然还学了序列和同义词;
首先是视图部分,视图就是一种数据库的对象,是对sql语句进行一个封装,成为一张虚拟的表,该视图中是没有存放数据的,存放的是一个sql语句.
那么视图的优点都有什么呢?
                ---简化数据的操作,主要是查询的时候
                ---着重于特定数据
                ---提供一种安全机制( 定制访问权限 )
                ---提供向后兼容性
接下来就是创建一个视图了:
        ---create 参数1,参数2 视图名as sql语句 参数3,参数4
                ---参数1=or replace :如果要创建的视图存在则自动重新创建视图
                ---参数2=force :不论基表是否存在都会创建视图
                ---参数3=with check option :插入或者修改必须满足视图定义的约束
                ---参数4=with read only :只读视图,不能进行增删改
那么,sql语句中含有聚合函数,多表关联或者子查询的话,创建出来的就是属于复杂视图了.
当在复杂视图中要对数据进行修改的时候,就涉及到一个键保留表的知识,其实简答的理解就是新的视图中的主键字段来自于哪个表,那么那个表就是键保留表了,oracle中只能对键保留表的数据进行修改,不能对非键保留表的数据进行修改,当然了,该复杂视图中,如果没有存在主键的话,就更不用去谈数据的修改了,根本不可能滴!!!!
所以.有一个关于视图操作的规范:
        ---多用于多表数据的封装,单表数据不允许封装成视图
        ---视图创建的时候,只允许创建只读视图,因为我们不会对视图的数据进行修改
        ---是不允许通过视图去修改数据的
当然,对sql语句封装成视图之后,该视图是虚拟的表,每次在进行对数据库的操作的时候,都是还要执行一次sql语句,这样就导致了查询性能的降低,所以引出了物化视图的知识!
物化视图也可以叫实体化视图,就是真实存在有数据的一个表;所以对物化视图进行查询的时候,就相当于查询一个表,相比虚拟的视图就提高了查询性能,但是,物化视图是需要占用存储空间的,就是牺牲空间换取时间的意思.
        ---物化视图的关键字就是meterialized ,其余的操作更普通的视图是一样的,有三个参数
                ---数据生成的时间 =build ( 创建时生成=immediate | 需要时在生成=deferred )
                ---刷新机制=refresh ( 增量刷新=fast | 完全的刷新=complete | force=强制刷新 )
                ---刷新模式=on ( 手动刷新=demand | 自动刷新=commit )
第二部分重点就是索引了.是为了加快数据的存取的一个对象,当然了,它也是牺牲空间换取时间的,需要占用存储空间的.
有分为普通索引 \ 唯一索引 \ 组合索引 \ 反向键索引 \ 位图索引等
        ---普通索引 :就是想姓名这种,会有重复值存在的字段
        ---唯一索引 :就是表格的主键字段才能设置成唯一索引
        ---组合索引 :将多个字段组合成为一个新的索引
        ---反向键索引
        ---位图索引 :提升数据查询性能的,是针对低基数列而言的
                ===高基数列 :数据多种类也多,如从1到1亿的数字
                ===低基数列 :数据多,但种类少,如1到1亿条性别数据
                位图索引就相当于一个图片的意思,每条数据就相当于是该图片上的每一个像素
然后还序列和同义词的知识.
序列就是为了处理oracle中主键不能自增的问题
        ---关键字是sequence ( nextval | currval )
同义词就是一个表的别名的意思,主要是为了保护数据的安全性的使用
        ---关键字是synonym ,同义词的对象可以是表,视图,序列
就这么多吧,第一次总结写这么多~~~~~~~~~~~
回复 使用道具 举报
谢洪彬:
        oracle对象:
                视图
                        概述:将一段语句对象封装成一个视图表,但是其本身并没有真实的数据,数据来源于语句的基表.
特点:
        1.简化代码编程,提高效率        -->可以理解为将语句封装起来,用起来更加方便
        2.着重于特定的数据            -->一般经常用到并且指定的数据
        3.简单而有效的安全机制        -->不详展示的数据可以不显示出来
        4.向后的兼容性                -->可以在不同的系统上去使用
                分类:
                        1.普通视图
                        创建: create view 视图名 as 语句
                        参数:
                         or replace : 如果你创建的视图存在,可以使用这个关键字进行覆盖
                        force : 不管你的基表是否存在,都会帮你创建这个视图
                        with check option : 创建的视图不能修改条件值这一项
            wiith read only : 创建的视图只能进行查看读取,不能进行修改
        在进行多个表连接的视图创建时会有一个键保留表的一个概念,意思是在键保留表中存在主键的那个表,也只有键保留表才能进行修改操作.               
                        2.物化视图
概念:不同于普通视图,他的数据是会储存在一个副本当中.他类似于一张表,会占据空间,不同于普通视图,每次都是执行查询语句查询基表,他是每次操作副本.
优点:提高查询效率
                缺点:牺牲空间为代价
        创建: create meterialized view 视图名 as 表名
        参数:
          BUILD IMMEDIATE :立即产生数据 (默认)
          BUILD DERERRED : 需要是产生数据
          REFRESH FAST : 增量刷新(刷新新增的数据)
          REFRESH COMPLETE : 整体刷新(全部刷新)
          REFRESH FORCE : 自动判断以上两种情况(默认)
          刷新的参数:
                手动刷新: ON DEMENT(默认)
                自动刷新: ON COMMIT
手动刷新的代码:
                begin
                DBMS_MVIEW.refresh(‘视图名’,’C’)
End
注:
                1.普通视图并不能提升查询效率
                2.修改视图数据都会对基表进行改变
               

序列:
          作用:产生唯一数字,可以运用在表中作为主键的自增
          创建: create requence 序列名
          参数:
                运用在创建序列时:
                increment by :每次自增的值
                start with :开始自增的位置
                maxvalue :到最大自增的值
                minvalue:最小自增的值
                使用在表中:
                nextval:下一个值                
currval:当前值
同义词:
        作用:给表,视图...起别名
        创建:
        create synonym 别名 for 表名
        创建公共同义词关键字:public               
索引:
                作用:增加查询语句性能,提交效率
                创建:create index 索引名 on 表名(字段名)
                参数:
                unique: 创建唯一索引使用,比如主键,身份证这些字段是唯一的.我们可以使用添加唯一索引提高查询效率
                复合索引:多个字添加一个索引,只需要在表名(字段1,字段2..)就可以实现复合索引创建.
        分类:
                反向索引:
                 理解:可以理解为按顺序来排序的,比如1....100这种需要将至打乱,底层可以理解为转换成二进制,反转,在转换成数字,如果是按顺序来回形成歪脖子数,结构不对
关键字:reverse
                位图索引:
        可以使用在,性别,省份等这样的字段上
        关键字:bitmap
回复 使用道具 举报
Oracle对象 第三天
何平波
1.视图
概念:视图是一种数据库对象,是从一个或者多个导基表出的虚表.  视图是一张虚拟表
简而言之,视图可以简化复杂多表查询语句.
优点:

创建视图语句
create[or replace][force] view 视图名称
as subquery (sql查 询语句)
视图与表的关系,在视图是增删改数据,那么表中对应的字符安也会被修改.
视图带检查约束,带检查约束的条件是不能被修改的.
关键字:with check option

*只读视图
只能查,不能增删改.
关键字:with read only

带错误的视图
关键字:force   允许表不存在,可以先建一个错误
视图,然后表被创建出来了,错误视图就可以使用了.
create force view 视图名 as .....
*一张表是不能创建视图的,两表以上才会创建视图.

复杂视图:
键保留表>>>在基表有的字段才能修改,即主键所在的表就是
键保留表,只能修改键保留表.而非键保留表的表是不能修改的.

视图最好是不修改的,只做查询.


2.物化视图>>>实体化视图
基表的副本,需要占用储存空间,查物化视图就等同于查基表,
建物化视图的的语法
create meterialized(实体化) view 视图名
as subquery 查询语句
[build immediate(默认选项,马上创建) | build deferred(手动创建)]
[refresh [fast(快速刷新>增量刷新)|complete(完整刷新)|force(强制刷新)>默认选项,自动选择]]
[on [commit(在基表操作后自动提交) | demand(手动提交)]]
一创建物化视图,也会随之生成一张基表.>>>复制表
第1种情况
创建不自动刷新的物化视图,这时候修改基表的数据后,再去查物化视图,物化视图的数据并不会改变,需要去手动刷新
Begin
Dbms_muiew.refresh(“物化视图名”,”c”)
End
第2种情况 创建自动刷新的物化视图  关键字 refresh  on commit
创建自动刷新的物化视图,这时候在基表修改数据的话,物化视图的数据也会自动刷新修改.
第3中情况 创建是时不生成数据的物化视图
关键字  build deferrd   这时候无论在基表做哪些操作,物化视图都没有任何变化.还是需要去手动刷新.
Begin
Dbms_muiew.refresh(“物化视图名”,”c”)
End

第4种情况
创建增量刷新的物化视图
关键字 refresh fast as 有条件限制,前提是必须有
物化视图日志:记录基表发生了哪些变化,用这些记录去更新物化视图.
创建物化视图日 create materakized view log on 基表 with rowid,给基表创建物化视图日志

3.序列
概念:序列是Oracle提供的用于产生一系列唯一数字的数据库对象
创建序列语法
create sequence 序列名(seq_表名)
seq_account.nextval >>>代表下一个值,伪例
>>select seq_序列名.nextval from dual  >>>1,2,3,4..
类似于mysql自动递增.
seq_序列名.currval  序列的当前值

创建复杂序列
最大值封顶,在往下找就会报错
maxvalue xx >>>最大值封顶
increment by xx   >>>自动增长的数
start with xx    >>>从哪开始
minvalue xx      >>>最小值  
      ^
          |
循环的序列 关键字cycle
一次缓存的数有多少,cache值*增长值
一次循环的值不能小于一次缓存的数
*标准语法
create sequence 序列名称
start with 指定起始值
increment by 指定增量值
nocycle 不循环
nocache 不缓存

同义词
概念:指指定方案对象的一个别名.
创建私有同义词
语法:create synonym 同义词表名 for 基表名; >>私有的只能当前用户使用
创建公有的同义词
语法:create public synonym 同义词表名 for 基表名 :>>>共有的所有用户都可以访问.

索引  *****
概念:是用来加速数据存取的数据对象.合理的使用索引可以大大降低i/o次数,从而提高数据访问性能!
时间换空间,空间换时间  性能>><<内存
count(*) count(1) count(id) count(id)>>>执行效率最高.
创建索引语法
create index 索引名(索引名格式:index_表名_列名) on 表名(列名)

3,创建索引
create index 索引名 on 表名(列名);
4.唯一索引关键字 unique
5.组合索引
create index 索引名 on 表名(列名1,列名2)
回复 使用道具 举报
叶身辉:

今天学习的Oracle的优化的一些知识
一,首先学习了视图,视图主要是用来封装复杂的sql查询语句,将其作为一个视图显示出来,且下次查询的时候可以直接查询视图名来实现查询,
在工作中一般我们使用视图都是用来封装多表数据的,且只用来作为只读来使用,不会在视图上修改数据.
二,物化视图,
物化视图和视图的区别在于它是一个真实存在的表,该表存着视图查询出来的结果集,
使用物化视图可以免去每次使用视图都进行多表查询,提高了效率,但是一般不建议使用,
因为优点不是太过于明显,且还需要占用磁盘空间,结果还是要进行单表查询,效果不大
三,学习了序列
序列是一种产生和mysql的自增功能的方法,使用序列可以产生一个唯一的一个数,
可以用来作为表格的主键使用
四,同义词
相当于给表格起一个别名,有私有和公有之分,一般应用在银行,主要是为了数据的安全性,使用同义词可以提高安全性,
五,索引
索引比较复杂,分为很多种,索引的功能主要是优化了查询,使用索引可以缩短查询的时间,提高效率,主要有普通索引,唯一索引,复合索引,位图索引等,索引是一门比较高深的技术,需要以后深入学习,现在主要是掌握其功能和用处会使用普通索引,位图索引即可.
回复 使用道具 举报
汪志阳:
视图:将基表上的查询信息封装再视图中,查询方法与在表中的查询方法一致
视图的有点:
                从多张基表中按一定业务逻辑抽出需要查看的部分,形成一张虚表
                可以限制用户只能通过视图检索数据,就可以对最终的用户屏蔽底层的基表
                着重于特定数据:不重要的数据可以不出现在视图中
视图的语句:
        create [or replace] [force] view 视图名a as 一条sql语句 [with check option][with read only]
        [or replace]:视图存在则覆盖创建;[force]:不管存在否都新建;[with check option]:修改需要满足约束条件,我们一般不运用视图进行数据的处理
        [with read only]:数据只读,不能进行其他操作
与物化视图的区别:
        普通视图并不存储任何数据,虚拟表应用局限性较大,任何对视图的查询,oracle都在转换为视图对应的定义Sql语句.对整体的性能没有影响
        物化视图则是将数据查询结果的对象,实际存在的数据.是远程数据的本地副本
序列:oracle中提供的用于产生一系列唯一数字的数据库对象
        语句:create sequence 序列名称
        start with 指定序列的开始值
        incremeny by  指定(每次)增量值
        maxvalue 最大值
        minvalue 最小值
        cycle 循环
        cache 每次缓存的数量
        我们后面要使用Oracle 序列+触发器 实现的主键自增
同义词:
私有同义词:为表创建同义词,查询数据就可以通过查询同义词来获取:
create synonym a for t_owners;
select * from a;
公有同义词:为表创建公有同义词,其它的用户登录也可以使用公有同义词:
普通索引:
        create index 索引名称 on 表名(列名);为表中的某个字段即列名引入索引
        用于加速数据存取的数据对象,可以提高数据查询的性能,使用于经常查询很少进行增,删的表,可以对表相关列的取值进行检查(空值不能被索引)
回复 使用道具 举报
郭明杰
视图的作用是简化数据操作,可以选择性的显示数据,对视图进行更改的时候,原表的数据也会随之更改.多表查询才会创建视图,视图一般只读操作,单表操作创建视图 与在视图进行增删改操作 都是没有意义的,效率更低,没有键保留表的视图 默认为只读视图
同义词的概念就等同于给表起别名,可以通过这个别名来操作表, 用 create public synonym 实现共有同义词的创建,不加public则是私有同义词,私有同义词只能 当前用户使用

索引的作用是增加查询的效率,用于数据量庞大的查询,当表的某个字段被标记primary key 主键标识  ,默认创建索引
唯一索引用于不重复的值,比如身份证等
位图索引的作用就是减少响应时间,节省空间占用
回复 使用道具 举报
张育辉

6,视图概述:
1;视图其实就是一张虚拟的表,它的数据其实来自于表,如果更改了视图的数据,表的数据也自然会变化,更改了表的数据,视图也自然就会变化,一个视图并不是数据,而是一条sql语句;
2;视图分为简单视图,带检查约束视图,和只读视图
使用视图的优点:
1;简化数据库操作,
2;可以定制用户 数据,
3;基表中数据有了一定的安全性
4;可以合并分离数据,创建分区视图
7:物化视图概述;
1,视图是一张虚拟表,也就是一条执行语句返回的结果集,每次访问它都会导致这个查询语句执行一次,为了避免每次访问都执行这个查询,可以将这个查询结果存储到一个物化视图,也就是实体化图;
2,物化视图与普通的视图相比的区别是物化视图是建立的副本,它类似于一张表,需要占用存储空间。而对一个物化视图查询的执行效率与查询一个表是一样的;
3,物化视图默认是手动刷新的物化,视图有二种刷新模式:
在创建时refresh mode或 on demand 还是 on commit。on demand 顾名思义,仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;
on commit  提交触发,一旦基表有了commit,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。一般用这种方法在操作基表时速度会比较慢。创建物化视图时未作指定,则Oracle按 on demand 模式来创建。
手动刷新语句 begin DBMS_MVIEW.refresh('视图名字','C'); end;
8:序列
概述:序列是 ORACLE 提供的用于产生一系列唯一数字的数据库对象,
用途:一般都是用于主键自增,默认最小值是1,自增1, 自增时候,记住一点,nocycle ,nocache
NEXTVAL 返回序列的下一个值
CURRVAL 返回序列的当前值
同义词:就是给表取个别名,保证表的安全性,可以共有,私有的
9:索引
1:概述:一个索引是存储的表中一个特定列的值数据结构(最常见的是B-Tree)。索引是在表的列上创建。所以,要记住的关键点是索引包含一个表中列的值,并且这些值存储在一个数据结构中。请记住记住这一点:索引是一种数据结构 。索引是需要占据存储空间的,也可以理解为是一种特殊的数据。形式类似于一棵“树”,而树的节点存储的就是每条记录的物理地址,也就是我们提到的伪列(ROWID)
2,唯一索引,如果我们需要在某个表某个列创建索引,而这列的值是不会重复的。这是我们可以创建唯一索引
3,反向键索引
应用场景:当某个字段的值为连续增长的值,如果构建标准索引,会形成歪脖子树。这样会增加查询的层数,性能会下降。建立反向键索引,可以使索引的值变得不规则,从而使索引树能够均匀分布。
4,位图索引
使用场景:位图索引适合创建在低基数列上 也就是有固定的  
位图索引不直接存储ROWID,而是存储字节位到ROWID 的映射
优点:减少响应时间,节省空间占用
10 索引的总结:
创建索引可以大大提高系统的性能。
       第一、通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
       第二、可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
       第三、可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
       第四、在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
       第五、通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

      也许会有人要问:增加索引有如此多的优点,为什么不对表中的每一个列创建一个索引呢?因为,增加索引也有许多不利的方面。
      第一、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
      第二、索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
      第三、当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

B树索引 和 位图索引 哪个性能高? 没有可比性

        B树索引 和 位图索引 都是为了解决查询性能
        应用场合 B树适合高基数列 group by --> 高基数列

        位图 解决B树索引无法解决低基数列索引问题  如,性别 省份
        位图索引 --> 只有Oracle才有
        1) 如果一张表的数据在运行了一段时间之后发现查询慢了 第一应该想到建立索引
        2) 按姓名查询建普通索引 按性别查询或省份 位图索引 身份证查询    唯一索引
        3) 注意 : 一张表的索引不是越多越好!经常增加 修改 删除数据的重建索引成本很好所以要控制好索引数据
        4) 什么时候适合创建索引 1) 表数据量 > 10W 2) 一定经常用作查询的列 才适合建索引
        5) 什么时候不适合贱索引 经常做添加 修改 删除的 表示不适合建索引 ,而且如果一张表只有几列几个数据也不适合建索引
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马