- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
5.1 索 引 为什么在字典中进行查找时能够很快地找到要查的内容呢?主要原因是字典中 已按某种顺序进行了排序。 在Oracle 10g中,索引是一种供服务器在表中快速查找一个行的数据库结构。 在数据库中建立索引主要有以下作用: (1) 快速存取数据; (2) 既可以改善数据库性能又可以保证列值的唯一性; (3) 实现表与表之间的参照完整性; (4) 在使用ORDER BY、GROUP BY子句进行数据检索时,利用索引可以减 少排序和分组的时间。 5.1 索 引 5.1.1索引的分类 索引按功能和索引对象有以下类型: (1)单列索引和复合索引。单列索引在索引键中仅有一列;复合索引是在表内多 个列上创建的,也称为“组合索引”。 (2)唯一索引和非唯一索引。唯一索引意味着不会有两行记录相同的索引键值; 不对索引列的值进行唯一性限制的索引称为非唯一索引。 (3)未排序索引和逆序索引。未排序索引也称为正向索引。Oracle 10g数据库中 的行是按升序排序的,因此创建索引时不必指定对其排序而使用默认的顺序。逆 序索引也称为反向索引。该索引同样保持索引列按顺序排列,但是颠倒已索引的 每列的字节。 (4)基于函数的索引。基于函数的索引是指索引中的一列或者多列是一个函数或 者表达式,索引根据函数或者表达式计算索引列的值。 (5)分区索引和非分区索引。所谓分区索引应用于大型表,是指索引可以分散地 存在于多个不同的表空间中。将与某个索引对应的索引项存储在多个段中。分区 索引可以在多个表空间中展开,从而降低索引查找争用并提高可管理性。分区索 引通常用于分区表,以提高可伸缩性和可管理性,可为每个表分区创建一个索引 分区。而B树索引和位图索引都属于非分区索引。 5.1 索 引 5.1.1 索引的分类 索引按存储方法分类,可以分为两类:B*树索引和位图索引。 (1) B*树索引。B*树索引的存储结构类似书的索引结构,有分支和叶两种类型 的存储数据块,分支块相当于书的大目录,叶块相当于索引到的具体的书页。 B*树索引是最常用的一种索引,是默认方式。索引的顶部为根,包含指向索引 中下一级的项。下一级为分支块,分支块又指向索引中下一级的块。最低一级为 叶节点,其中包含指向表行的索引项。B*树索引中所有的叶节点都具有相同的深 度,因此任何类型的查询都具有相近的查询速度。B*树索引能适应多种查询条件, 包括精确查询和模糊查询。 5.1 索 引 5.1.1索引的分类 (2) 位图索引。位图索引储存主要用来节省空间,减少ORACLE对数据块的访 问,它采用位图偏移方式来与表的行ID号对应,采用位图索引一般是重复值太多 的表字段。 位图索引为每个唯一索引字段值建立一个位图,在位图中使用比特位来对应一 条记录的ROWID,如果该比特位为1,说明与之对应的ROWID是一条包含该位图 索引字段值的记录。比特位到ROWID的对应关系通过位图索引中的映射函数来完 成。 5.1 索 引 5.1.1索引的分类 在下列情况中,位图索引比B*树索引更有利: 当表包含数百万行且键列的基数很低(即该列中重复的值很多)时; 当查询经常使用涉及OR运算符的多个WHERE条件组合时; 当键列上存在只读或很少的更新操作时。 表5-1 B树索引与位图索引的区别 B*树操作更适合索引动态表的联机事务处理环境,而位图索引更适合在大型静态 表上使用复杂查询的数据仓库环境。 5.1.2 使用索引的原则 创建索引应考虑的问题: (1)索引能够提高查询性能并降低DML操作速度。始终使表所需的索引数保持最少。 (2)将索引放在一个单独的表空间中,不要放在有撤销段、临时段和表的表空间中。 (3)对大型索引而言,避免生成重做日志可显著提高性能。可以考虑使用NOLOGGING子句创建大型索引。 (4)由于索引项比索引行小,索引每个索引块中可能包含更多的项。因此,INITRANS参数在索引中通常应设置的比在对应的表中高。 当用户考虑在表中使用索引时,应遵循下列一些基本的原则: (1) 在表中插入数据后创建索引 (2) 索引正确的表和列 (3) 合理安排索引列——列的排序,将最常用的列放到前面 (4) 限制表中索引的数量 (5) 指定索引数据块空间的使用 (6) 根据索引大小设置存储参数 5.1.3 创建索引 创建索引有三种方法:随数据库表创建
原创力文档


文档评论(0)