前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《Oracle Concept》第三章 - 1

《Oracle Concept》第三章 - 1

作者头像
bisal
发布2019-05-17 12:19:32
4900
发布2019-05-17 12:19:32
举报

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1428744

背景:

按照《Oracle Conecpt》的结构一起了解Oracle数据库,这是学习Oracle从入门到精通的基础。

本文主题:第三章《Indexes and Index-Organized Tables》 - Overview of Indexes。

这章讨论的是索引和索引组织表相关的知识,索引是一种能提高表行数据访问速度的对象,索引组织表是一个以索引结构存储数据的表。

这章包含的内容:

  • 索引概要
  • 索引组织表概要

索引概要

索引是一种可选的结构,他和表或者表簇相关联,能提高数据访问的速度。通过创建一张表中某一列或者多列的索引,你就有能力快速提取随机分布在表中的一个小数据集。索引是降低磁盘IO的方法之一。

如果一张堆表没索引,那么数据库就必须执行一次全表扫描来检索某个值。例如,没建索引,在hr.departments表定位location是27的值就需要数据库扫描每一个表块。随着数据量的增加,这种方法不会有很好的扩展性。

打一个比方,假设一个HR经理有个卡片箱的柜子。包含雇员信息的文件夹会随机插入箱子中。雇员Whalen(ID是200)的文件夹是放在从底往上数第10个文件夹中,而King(ID是100)的文件夹是放在第三个箱子中。为了定位文件夹,经理会从1号箱子开始浏览每个文件夹,直到文件被找到。为了提高访问的速度,经理能创建个顺序存储每个雇员ID和他对应文件夹位置的索引。

相类似,经理可以创建雇员姓氏、部门ID等这些字段的独立索引。

总的来说,在下面这些情况可以考虑创建索引:

  • 会频繁使用索引列检所,返回的结果集是表中小部分数据。
  • 在索引列上存在外键。索引是一种避免表锁的方法,如果该外键字段无索引,那么更新父表的主键、使用merge插入父表、或者删除父表的数据,都会产生表锁。可以参考《探究外键为何要建索引?》和《外键为何要建索引?》。
  • 需要为表创建一个唯一键约束,你可能会手动指定索引和其选项。

可以参考:第五章,“数据一致性”。

索引的特征

索引是一种逻辑上和物理上均和关联的表对象独立的对象。因此,删除或者创建索引,并不会在物理上影响索引所在的表。

注意:

如果删除索引,应用则会变慢。然而,之前通过索引对数据的访问会变得更慢。

索引存在与否不需要任何SQL语句层面的改动。索引是一种快速访问单行数据的方法。他只会影响执行的速度。假设一个数值已经被索引,索引就会直接指向包含这个数值的行物理位置。

在创建索引后,数据库会自动管理和使用索引。数据库还会自动影响数据的改变,例如增加、更新和删除所有和索引关联的行,不需要用户执行任何操作。尽管会插入新行,索引数据的提取性能总会是一致的。但是,表中存在多条索引会降低DML的性能,因为数据库必须更新这些索引。

索引存在以下的属性:

  • Usability,可用性

索引可以是usable(默认)或者unusable。一个unusable不可用索引在执行DML期间不会被维护,并且被优化器所忽略。unusable不可用索引能提高批量加载的性能。为了不删除或重建索引,你可以将索引置为unusable,然后重建。unusable不可用索引和索引分区不会消耗空间。当你讲一个usable索引置为unusable,数据库会删除对应的索引段。

  • Visibility可见性

索引可以是visible(默认)或者invisible。一个invisible不可见索引在DML执行期间会被维护,但是默认不会被优化器使用。将索引置为invisible是让索引unusable或者删除索引的替代方案。invisible索引在删除索引前的测试,或者在不影响整体应用的情况下临时使用索引的场景,非常有用。

可以参考:

探索索引的奥秘 - 索引的属性

“优化器概要”。

《Oracle Database 2 Day DBA》和《Oracle Database Administrator's Guide》了解如何管理索引。

《Oracle Database Performance Tuning Guide》了解如何优化索引。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年05月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档