欢迎来到天天文库
浏览记录
ID:49127134
大小:1.22 MB
页数:98页
时间:2020-01-31
《ORALCE 索引完全讲解.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Oracle索引本章内容索引概述创建索引修改索引查看索引一、索引的概念索引是建立在表上的可选对象,设计索引的目的是为了提高查询的速度。但同时索引也会增加系统的负担,进行影响系统的性能。目录可以帮助读者快速查找所需要的内容,数据库中的索引就类似于书的目录。有了索引,DML操作就能快速找到表中的数据,而不需要扫描整张表。因此,对于包含大量数据的表来说,设计索引,可以大大提高操作效率。在书中,目录是内容和页码的清单,而在数据库中,索引是数据和存储位置的列表。6.1Oracle索引概述一、索引的概念索引是建立在表上的可选对象。索引的关键在于通
2、过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率。索引在逻辑上和物理上都与相关的表的数据无关,当创建或删除一个索引时,不会影响基本的表、数据库应用或其他索引,当插入、更改和删除相关的表记录时,Oracle会自动管理索引,如果删除索引,所有的应用仍然可以继续工作。因此,在表上创建索引不会对表的使用产生任何影响,但是,在表中的一列或多列上创建索引可以为数据的检索提供快捷的存取路径,提高检索速度。一、索引的概念索引一旦建立后,当在表上进行DML操作时,Oracle会自动维护索引,并决定何时使用索引。索引的使用对用户是透明的
3、,用户不需要在执行SQL语句时指定使用哪个索引及如何使用索引,也就是说,无论表上是否创建有索引,SQL语句的用法不变。用户在进行操作时,不需要考虑索引的存在,索引只与系统性能相关。二、索引的原理当在一个没有创建索引的表中查询符合某个条件的记录时,DBMS会顺序地逐条读取每个记录与查询条件进行匹配,这种方式称为全表扫描。全表扫描方式需要遍历整个表,效率很低。二、索引的原理假设SALES表的数据如表所示。ROWID伪列表示记录的物理存储位置。SALES表的TOPIC列没有特定的顺序。现在查询TOPIC为PEN的记录。由于在TOPIC列上没
4、有索引,该语句会搜索所有的记录。因为即使找到了PEN也不能保证表中只有一个PEN,必须全部搜索一遍。二、索引的原理在TOPIC列上建立索引,Oracle对全表进行一次搜索,将每条记录的TOPIC值按升序排列,然后构建索引条目,即(TOPIC值,ROWID值),存储到索引段中。当查询PEN的记录时,如何查找?三、索引的类型Oracle支持多种类型的索引,可以按列的多少、索引值是否唯一和索引数据的组织形式对索引进行分类,以满足各种表和查询条件的要求。1.单列索引和复合索引2.B树索引3.位图索引4.函数索引1.单列索引和复合索引一个索引可
5、以由一个或多个列组成。基于单个列所创建的索引称为单列索引,基于两列或多列所创建的索引称为多列索引。2.B树索引B树索引是Oracle数据库中最常用的一种索引。当使用CREATEINDEX语句创建索引时,默认创建的索引就是B树索引。B树索引是按B树结构或使用B树算法组织并存储索引数据的。B树索引就是一棵二叉树,它由根、分支节点和叶子节点三部分构成。其中,根包含指向分支节点的信息,分支节点包含指向下级分支节点和指向叶子节点的信息,叶子节点包含索引列和指向表中每个匹配行的ROWID值。叶子节点是一个双向链表,因此可以对其进行任何方面的范围扫
6、描。2.B树索引B树索引中所有叶子节点都具有相同的深度,所以不管查询条件如何,查询速度基本相同。另外,B树索引能够适应各种查询条件,包括精确查询、模糊查询和比较查询。2.B树索引B树索引的分类如下所示。Unique:唯一索引,其索引值不能重复,但允许为NULL。在创建索引时指定UNIQUE关键字可以创建唯一索引。当建立“主键约束条件”时Oracle会自动在相应列上建立唯一索引,主键列不允许为NULL。Non-Unique:非唯一索引,其索引值可以重复,允许为NULL。默认情况下,Oracle创建的索引是非唯一索引。ReverseKey
7、:反向关键字索引。通过在创建索引时指定“REVERSE”关键字,可以创建反向关键字索引,被索引的每个数据列中的数据都是反向存储的,但仍然保持原来数据列的次序。3.位图索引在B树索引中,保存的是经排序过的索引列及其对应的ROWID值。但是对于一些基数很小的列来说,这样做并不能显著提高查询的速度。所谓基数,是指某个列可能拥有的不重复值的个数。比如性别列的基数为2(只有男和女)。因此,对于象性别、婚姻状况、政治面貌等只具有几个固定值的字段而言,如果要建立索引,应该建立位图索引,而不是默认的B树索引。3.位图索引当创建位图索引时,Oracle
8、会扫描整张表,并为索引列的每个取值建立一个位图。在这个位图中,对表中每一行使用一位(bit,取值为0或1)来表示该行是否包含该位图的索引列的取值,如果为1,则表示该位对应的ROWID所在的记录包含该位图索引列值。最后通过
此文档下载收益归作者所有