Oracle Database 11g应用与开发教程 教学课件 ppt 作者 978-7-302-31490-5 第9章 索引、视图、序列和同义词

上传人:E**** 文档编号:89349064 上传时间:2019-05-23 格式:PPT 页数:81 大小:1.86MB
返回 下载 相关 举报
Oracle Database 11g应用与开发教程 教学课件 ppt 作者 978-7-302-31490-5 第9章 索引、视图、序列和同义词_第1页
第1页 / 共81页
Oracle Database 11g应用与开发教程 教学课件 ppt 作者 978-7-302-31490-5 第9章 索引、视图、序列和同义词_第2页
第2页 / 共81页
Oracle Database 11g应用与开发教程 教学课件 ppt 作者 978-7-302-31490-5 第9章 索引、视图、序列和同义词_第3页
第3页 / 共81页
Oracle Database 11g应用与开发教程 教学课件 ppt 作者 978-7-302-31490-5 第9章 索引、视图、序列和同义词_第4页
第4页 / 共81页
Oracle Database 11g应用与开发教程 教学课件 ppt 作者 978-7-302-31490-5 第9章 索引、视图、序列和同义词_第5页
第5页 / 共81页
点击查看更多>>
资源描述

《Oracle Database 11g应用与开发教程 教学课件 ppt 作者 978-7-302-31490-5 第9章 索引、视图、序列和同义词》由会员分享,可在线阅读,更多相关《Oracle Database 11g应用与开发教程 教学课件 ppt 作者 978-7-302-31490-5 第9章 索引、视图、序列和同义词(81页珍藏版)》请在金锄头文库上搜索。

1、第1页,授课教师:姚瑶 职务:讲师,Oracle 11g数据库应用教程,第2页,第9章 索引、视图、序列和同义词,在Oracle中,索引、视图、序列等是除表以外重要的数据库对象。索引是一种特殊类型的数据库对象,它保存着数据表中一列或几列组合的排序结构。为数据表增加索引的主要目的是大大提高数据的检索效率。视图是一种常用的数据库对象,常用于集中、简化和定制显示数据库中的数据信息,为用户以多种角度观察数据库中的数据提供方便。使用视图还可以实现强化安全、隐藏复杂性和定制数据显示等好处。此外,Oracle还提供了序列、同义词等数据库对象。,第3页,本章首先介绍索引的基本概念、使用索引的意义、创建和维护索

2、引的方法,然后介绍视图的基本概念以及视图的创建、修改、删除和使用等,最后对序列和同义词进行简单介绍。 本章的学习目标: 理解索引的基本概念 掌握创建索引的方法 掌握维护索引的基本方法 理解视图的基本概念和视图的作用 掌握创建视图和修改视图的方法 掌握更新视图的方法 了解同义词和序列,第4页,9.1 索引,索引是关系型数据库的一个基本概念。在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快,作用类似于一本书的目录。本节主要介绍索引的概念、作用和使用方法。,9.1.1 索引概述,1. 索引的概念 索引是SQL Server编排数据的内部方法。它为数据库提供一种方

3、法来编排查询数据。索引页是指数据库中存储索引的数据页,索引页类似于汉语字(词)典中按拼音或笔画排序的目录页。 索引是以表的列为基础的数据库对象,它保存着表中排序的索引项,并且记录索引列在数据表中的物理存储位置,实现表中数据的逻辑排序。索引提供指针以指向存储在表中指定列的数据值,然后根据指定的排序次序排列这些指针。数据库使用索引的方式与使用书的目录很相似:通过搜索索引找到特定的值,然后跟随指针到达包含该值的行。,第5页,用户可以利用索引快速访问数据库表中的特定信息。索引是对数据库表中一个或多个列的值进行排序的结构。如果想根据用户名来查找特定的用户,则可按UserName建立索引将大大缩短查询的时

4、间。图9-1演示了索引的存储和工作情况,每个UserName值按顺序存储,并指向表中包含各个值的数据行。,图9-1 索引的存储和工作情况,第6页,2. 使用索引的意义 索引具有两个功能:一是为了实施主键和唯一性约束,再者是为了提高性能。应用程序的索引策略对于性能至关重要。创建主键时,Oracle会自动创建该列的索引。唯一性约束也需要索引。与主键约束的区别在于,唯一性约束的列可以留空,甚至可以在多行留空。索引对于性能而言至关重要。在执行包含WHERE子句的任何SQL语句时,Oracle必须确定要选择或修改的行。如果WHERE子句中引用的列上没有任何索引,唯一的途径是扫描整个表。全表扫描将读取表中

5、的每一行,以便找到相关行。如果表有数十亿行,那么将耗用好几个小时。如果相关的列上存在索引,Oracle将改为查找索引。索引是有序键值列表,其结构合理,使搜索变得更加有效。每个键值是指向表行的指针。如果表超过一定的大小,而且要检索的行的比例低于特定的值,那么,与扫描全表相比,通过索引查找来定位相关行将快得多。如果表较小,或WHERE子句将检索表行的一大部分,则全表扫描来得更快:您通常可以信任Oracle,Oracle可以根据数据库收集的有关表和表行的信息,制定出是否使用索引的正确决策。,第7页,第二种可以使用索引的情况是排序。如果SELECT语句包括ORDER BY、GROUP BY、UNION

6、或其他一些关键词,则必须按顺序排列行,如果有了索引,则可以按正确顺序返回行,而无须首先对它们进行排序。 索引有助于提高性能的第三个环境是连接表,不过此时,Oracle仍会根据表的大小和可用的内存资源做出选择:将表扫描到内存中并在那里将它们连接在一起可能比使用索引的速度更快。嵌入式循环连接(nested loop join)技术使用另一个表上的索引遍历一个表,这通常是一个大量使用磁盘的操作。散列连接(hash join)技术将整个表读入内存,将其转换为散列表,然后使用散列算法定位匹配的行,这是一个大量使用内存和CPU的操作。排序归并连接(sort merge join)在连接列上排序表,然后将它

7、们归并在一起:这通常是磁盘、内存和CPU资源之间的折衷。如果没有索引,Oracle将在可用的连接技术方面受到严重限制。,第8页,3. 使用索引的代价 虽然使用索引可以提高系统的性能,大大加快数据检索的速度,是不是索引多多益善呢呢?回答是否定的,因为使用索引是要付出一定的代价的。 索引需要占用数据表以外的物理存储空间。例如,建立一个聚集索引需要大约1.2倍于数据大小的空间。 创建和维护索引要花费一定的时间。 当对表进行更新操作时,索引需要被重建,这样就降低了数据的维护速度。,4. 创建索引的原则 为表建立索引时,要根据实际情况,在适当的表上选择适当的列创建适当数量的索引。一般原则是: 根据表的大

8、小来创建索引,第9页,由于索引本身也需要一定的开销,所以并不是说要给所有的表都创建索引就能提高数据库的性能。一般来说,不需要为较小的表创建索引。例如,专业表用来存储高校的专业信息。一般高校专业也就100多个左右。这100条记录对于计算机来说是非常小的数据量。所以,对于类似的小表没有必要建立索引。即使建立了索引,其性能也不会得到很大的改善。相反维护索引建立的开销,如维护成本等等,要比这个大很多。 另外,就是对于超大的表,也不一定要建立索引。如系统中有一张表,其主要用来保存数据库中的一些变更信息。往往这些信息只给数据库管理员使用。此时为这张表建立索引的话,反而不合适。因为这张表很少用到,只有在出问

9、题的时候才需要查看。 一般来说,如果经常需要查询的数据不超过10%到15%的话,那就没有必要为其建立索引的必要。因为此时建立索引的开销可能要比性能的改善大的多。这个比例只是一个经验的数据。如果数据库管理员需要得出一个比较精确的结论,那么就需要进行测试分析。,第10页, 根据列的特征来创建索引 列的特点不同,索引创建的效果也不同。数据库管理员需要了解为哪些列创建索引可以起到事倍功半的效果。同时也需要了解为哪些列创建索引反而起到的是事倍功半的效果。这有利于他们了解到底给为怎么样的字段建立索引。一般来说,主键列上建议建立索引,外键列可以建立索引,在经常查询的字段上最好建立索引。对于那些查询中很少涉及

10、的列、重复值比较多的列不要建立索引。 在一个表上创建索引的数量不是越多越好 通常来说,表的索引越多,其查询的速度也就越快,但表的更新速度则会降低。这主要是因为在更新记录的同时需要更新相关的索引信息导致。为此,在表中创建多少索引合适,就需要在这个更新速度与查询速度之间取得一个均衡点。,第11页,对于不经常使用更新操作的表可以设置多一点的索引。如对于一些数据仓库或者决策型数据库系统,其主要用来进行查询。相关的记录往往是在数据库初始化的时候导入。此时,设置的索引多一点,可以提高数据库的查询性能。同时由于记录不怎么更新,所以索引比较多的情况下,也不会影响到更新的速度。即使在起初的时候需要导入大量的数据

11、,此时也可以先将索引禁用掉,等到数据导入完毕后,再启用索引。可以通过这种方式来减少索引对数据更新的影响。 对于经常需要更新记录的表要限制索引的数量。如一些事务型的应用系统,数据更新频繁。此时如果在一张表中建立过多的索引,则会影响到更新的速度。由于更新操作比较频繁,所以对其的负面影响,要比查询效率提升要大的多。,第12页,9.1.2 索引的分类,在Oracle中可以创建多种类型的索引,以适应各种表的特点和各种查询条件的特点。可以按列的多少、索引列是否惟一、索引数据的组织形式对索引进行分类。一般分为单列索引与复合索引、惟一索引与非惟一索引、标准索引(B树索引)、位图索引和函数索引。本小节简单介绍各

12、种索引类型的工作原理。,1. B*树索引 B*树索引是Oracle中默认的、最常用的索引,也称标准索引。B树索引可以是单列索引或复合索引、唯一索引或非唯一索引。 B*树索引(B代表“平衡(balanced)”)是一个树结构。树的根节点指向第二级别的多个节点,第二级别的节点又指向第三级别的多个节点,依此类推。树的必需深度主要取决于表中的行数,以及索引键值的长度。B*树索引的主要数据都集中在叶子节点上。各叶子节点包括:索引列的值和记录行对应的物理地址。,第13页,在B树索引中,无论用户要搜索哪个分支的叶子结点,都可以保证所经过的索引层次都是相同的。Oracle采用这种方式的索引,可以确保无论索引条

13、目位于何处,都只需要花费相同的I/O即可获取它。无论对于大型表还是小型表,B树索引的效率都是相同的。B树索引能够适应多种查询条件,包括使用符号运算符的精确匹配与使用“LIKE”等运算符的模糊匹配。正是由于B树索引具有以上特点,在一般情况下,创建默认的B树索引可以适应大部分表的查询需求。B*树索引原理图如下所示。,图9-2 B*树索引原理图,第14页,2. 位图索引 B*树索引通过在索引中保存排过序的索引列植与相对应记录的ROWID来实现快速查找。但当一个表中某个列上的重复值很多时,那么在该列上创建B*树索引就不再合适。例如,学生性别只有“男”和“女”两个值,如果在该列上创建B*树索引,那么在根

14、据性别对该表进行查询时,大约要对表中50%的数据进行扫描,这显然失去了索引的意义。 也就是说当列的基数很低(基数低指在索引列中,所有取值的数量比表中行的数量少)时,为其建立的B树索引就不再合适。 Oracle建议,当一个列的所有取值数量与行的总数比例小于1%时,那么该列不再适合建立B*树索引,而适合于位图索引。在Oracle中为创建位图索引进行全表扫描时,创建位图索引记录,各个行都以在表中出现的顺序列出。在位图索引的图表中,各个值的列下面都标记了一个0或者1。0表示该值不存在于这一列中,1表示该值存在于这一列中。图9-3显示了位图索引以及对应的表行概念示意图。,第15页,“1”和“0”虽然自己

15、不能作为指向行的指针,但是,如果给定表的起始物理地址和终止物理地址,则由于图表中各个“1”和“0”的位置与表行的位置是相对应的,所以可以计算获取表中相应行的物理位置。,图9-3 索引的存储和工作情况,第16页,3. 反向键索引 在Oracle中,系统会自动为表的主键列建立索引,这个默认的索引是普通的B*树索引。在一个表中,索引列上的数据越随机,就越能体现B*树索引的优越性。然而对于主键值是按顺序(递增或递减)添加的情况,默认的B*树索引并不理想。因为由于B*树索引是以严格有序的方式将索引数值插入的,那么B*树索引树将变成一棵不对称的“歪树”。 反向键索引是一种特殊类型的B*树索引,在索引基于含

16、有有序数的列时非常有用。反向键索引中,如果用户使用序列编号在表中输入新记录,则反向键索引首先反向每个列键值的字节,然后在反向后的新数据上进行索引。例如,如果用户输入索引键2009,则反向转换为9002进行索引,2011会作为1112进行索引。这样,原来两个序列编号是递增的,但是当进行反向键索引时有的则是非递增的。这意味着如果将其添加到叶子节点上,可能会在任意的叶子节点中进行。这样就使得新数据在值的范围上的分布通常比原来的有序数更均匀。,第17页,4. 基于函数的索引 基于函数的索引只是常规的B树索引,但它是基于一个应用于表中数据的函数,而不是直接放在表中的数据本身上。基于函数的索引是指索引中的一列或者多列是一个函数或者表达式,索引根据函数或者表达式计算索引的值。列表达式可以是SQL函数、用户定义函数、 表列或常数。 例如,在Courses表中,将课程名存储为ORACLE,则用户使用小写ORACLE搜索时,就无法找到结果行。如果用户不能够确定输入数据的格式,那么就会产生一个严重的错误。,SQL SELECT * FROM Courses 2 WHERE Cname

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号