专栏首页bisal的个人杂货铺《Oracle Concept》第三章 - 1

《Oracle Concept》第三章 - 1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bisal/article/details/90206552

背景:

按照《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》了解如何优化索引。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • AI和机器学习获五角大楼”重用”,创建更强大的网络防御制度

    国防高级研究计划局(DARPA)正在推行一项前所未有的机器学习“突破性”技术,即开创一种网络安全新技术,旨在同时阻止多重攻击并尽量阻止现有防御系统无法识别的新型...

    大数据文摘
  • 两团队在《自然》上发布重要抗癌研究成果,消化系统肿瘤或有望治愈

    日前,来自英国Wellcome Sanger Institute团队,以及美国Broad Institute和Dana-Farber癌症研究所联合团队,在顶级期...

    镁客网
  • 「docker实战篇」python的docker-抖音web端数据抓取(19)

    PS:text文本中的数据1000条根本不够爬太少了,实际上是app端和pc端配合来进行爬取的,pc端负责初始化的数据,通过userID获取到粉丝列表然后在不停...

    IT故事会
  • Mysql last_insert_id()的不确定因素详解..

    last_insert_id() 在正确的情况下返回: 数字类型. 并且大于 0

    Tuesday
  • 流表相对论

    《Streaming Systems》第二部分讨论的是Stream and Table Relativity,翻译过来就是流表相对论。从Stream and T...

    哒呵呵
  • 简单聊下最近我对数据系统的看法

    1. 因为面向对象语言和关系性数据库存在阻抗不匹配(impedance mismatch),并且随着需要处理的数据量增大,文档型数据以“NoSQL”的名义获得了...

    哒呵呵
  • Engineering Village(EV)、Web of Science数据库使用权限

    Engineering Village(EV)、Web of Science数据库使用权限

    100000816580
  • 大数据技术之_19_Spark学习_02_Spark Core 应用解析小结

    1、RDD 全称 弹性分布式数据集 Resilient Distributed Dataset 它就是一个 class。

    黑泽君
  • 老程序员都去哪了?

    在纽约,PyGotham每年召开之际,都会有超过600名程序员聚集在一起讨论工作。

    大数据文摘
  • 实时计算实践:快速分析实时数据的解决方案

    在分布式系统中,根据应用的场景选择对应的数据存储方式是非常重要的一件事。这篇文章讨论的是在实时数据不断进入的情况下,如何结合历史数据进行快速分析。

    哒呵呵

扫码关注云+社区

领取腾讯云代金券