广告
返回顶部
首页 > 资讯 > 数据库 >如何理解oracle索引组织表
  • 480
分享到

如何理解oracle索引组织表

2024-04-02 19:04:59 480人浏览 安东尼
摘要

本篇文章给大家分享的是有关如何理解oracle索引组织表,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 今天学习下oracle中索引组织表,

本篇文章给大家分享的是有关如何理解oracle索引组织表,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

今天学习下oracle中索引组织表,通过这篇文章,你可了解到,什么是索引组织表?什么情况下可以使用索引组织?索引组织表的优点?索引组织表的弊端?

一:什么时候索引组织表(IOT)

索引组织表(index  organized table): 索引组织表以B*树结构存储,我们知道oracle默认的表是是堆表,堆表是以一种无组织的方式存储的(只要有可用的空间,就可以放数据),而ioT与之不同,IOT中的数据按着主键的顺序存储和排序的,对于应用来说,IOT表现得和常规的堆表并无区别,需要只用sql来正确的来访问IOT,简单的概述起来:索引组织表----》索引就是数据,数据就是索引,因为数据就是按着B*树结构存储的。如下图是一个典型的B*tree索引的结构(针对oracle b*tree索引的理解请参考我的另一篇文章Http://blog.itpub.net/29654823/viewspace-2150192/)。

而我们今天探讨的索引组织表也是按着这个结构存储数据的,它与B*tree索引的区别是:B*tree索引叶子节点存储是索引键值+rowid;而索引组织表的叶子节点存储的是整行数据,这很类似于Mysql的innodb引擎的表。需要注意的是IOT对于主键的设置格外严格,要求创建表的时候就必须指定明确的主键列,因为IOT中的数据是按着主键的顺序存储和排序的

如何理解oracle索引组织表

二;索引组织表的优点

1)首先显而易见的是索引组织表是可以节约空间的,因为索引和表合二为一,

2)还有就是根据主键进行唯一扫描或者范围扫描的时候由于索引的排列顺序这些列是按索引排列好的,而且比一般索引少一次ROWID回表的操作,那么速度会更快,

3)其次如果根据数据特点比如一个身份证号ID,一个银行卡号,显然一个身份证号ID可以有多个银行卡号,如果我们建立索引组织表结构为(身份证号ID和银行卡号),显然如果在查询的时候使用ID=** 那么这种情况下,索引组织表的优势就出来了,首先他少一次ROWID回表操作,其次索引组织表的排列是有序的,那么同一个身份证的ID的的卡号信息一定存储在临近的块中,这实际也是第二点的一个列子。

4)在堆组织表中,两行数据在同一个数据库块上的可能性几乎为0,而iot表根据主键排序后的顺序进行排列,所以在按着时间范围或者按着主键范围查询的数据在同一个块上或者相邻的块上,所以查询出来这些数据需要的逻辑io 和物理io都会减少。

5)提高缓冲区缓存效率,因为给定查询在缓存中需要的块更少,·减少缓冲区缓存访问,这会改善可扩缩性。

三:索引组织表的弊端以及适用场景:

索引组织表(IOT)不仅可以存储数据,还可以存储为表建立的索引。索引组织表的数据是根据主键排序后的顺序进行排列的,这样就提高了访问的速度。但是由于每次写入和更新后都要重新进行重新排序,导致插入和更新性能降低,所以个人认为在oltp系统中,不太适合使用IOT表,

IOT对信息获取、空间系统和OLAP应用最为有用,如果经常在一个主键或唯一键上使用between查询,如果数据有序地物理存储,就能提升这些查询的性能,

四:说下oracle索引组织表的溢出段(overflow段)

1)overflow段存在的意义

为了让索引叶子块(包含具体索引数据的块)能够高效地存储数据,索引一般在一个列子集上,通常索引块上的行数比堆表块上的行数多出几倍。索引指望着每块能得到多行,否则,oracle会花费大量的时间来维护索引,因为每个insert或update都可能导致索引块分解。

创建IOT时,overflow子句允许你建立另一个段(就相当于让IOT成为了一个多段对象,就像有一个CLOB列一样)如果IOT的行数据变得太大,就可以溢出到这个段中。读取数据的时候,oracle将读取行的"首部",找到行余下部分的指针,然后读取这些部分。

再就是因为所有数据都放入索引,所以当表的数据量很大时,会降低索引组织表的查询性能。此时设置溢出段将主键和溢出数据分开来存储以提高效率。注意长期都是SELECT * FROM 那么溢出段也就没有用处;

2)overflow段实现的方式;PCTTHRESHOLD和INCLUDING 两种

PCTTHRESHOLD n :制定一个数据块的百分比,当行中的数据量超过块的这个百分比的时候,行中余下的列将存储在溢出段,例如PCTTHRESHOLD是10%,而块的大小是8kb,所以长度大于800字节的行就会把其中一部分列值存储在别处,而不能在索引块上存储。

INCLUDING column_name :行中从第一列直到INCLUDING字句所指定列(包括这个列在内)都放入索引块,之后的列都放到溢出段

3)关于overflow段实现的方式的选择标准

1.如果你的应用中总是(或者几乎总是)使用表的前4列,而很少访问后5列,使用INCLUDING会更合适;

2.如果无法清除的指出哪些列总被访问而哪些列一般不会被访问,就可以考虑使用PCTTHRESHOLD。一旦确定了平均每个索引块上可能存储多少行,设置PCTTHRESHOLD就会很容易;例如你希望每个索引块上存储20行,那好,这说明每行应该是1/20(5%),你的PCTTHRESHOLD 就是5,这样每行数据占用块的大小最多是块的5%,就能保证可以存20行数据了;

针对oracle索引组织表,数据仓库等olap系统中可以使用,不太适合oltp系统,并且索引组织表上还可以创建索引,称之为二次索引,并且二次索引和常规表的索引相比效率烧低,因为IOT,通常需要两个扫描,一次扫描二次索引结构,另一次扫描IOT本身。然后关于索引组织表的溢出段可以使用ALTER TABLE ... OVERFLOW语句来更改溢出段的属性 。

以上就是如何理解oracle索引组织表,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 如何理解oracle索引组织表

本文链接: https://www.lsjlt.com/news/65896.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何理解oracle索引组织表
    本篇文章给大家分享的是有关如何理解oracle索引组织表,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 今天学习下oracle中索引组织表,...
    99+
    2022-10-19
  • 怎么理解oracle 12c分区表不完全索引
    本篇内容主要讲解“怎么理解oracle 12c分区表不完全索引”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解oracle 12c分区表不完全索引”吧!有...
    99+
    2022-10-18
  • 如何理解oracle中的反向键索引
    这篇文章将为大家详细讲解有关如何理解oracle中的反向键索引,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 反向键索引是一种B-tree索引,它在保持列...
    99+
    2022-10-19
  • oracle如何查询某个表的索引
    要查询某个表的索引,可以使用以下SQL语句:```sqlSELECT *FROM USER_INDEXESWHERE...
    99+
    2023-08-23
    oracle
  • 如何理解MySQL索引原理
    本篇内容主要讲解“如何理解MySQL索引原理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解MySQL索引原理”吧!案例背景假设面试官问你:在电商平台的订...
    99+
    2022-10-19
  • ORACLE如何为索引单独创建表空间
    小编给大家分享一下ORACLE如何为索引单独创建表空间,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!       Oracle 数据库的逻辑结构是由...
    99+
    2022-10-18
  • 如何理解MySQL索引cardinalit
    本篇内容主要讲解“如何理解MySQL索引cardinalit”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解MySQL索引cardinalit”吧!查看一...
    99+
    2022-10-18
  • oracle分区索引失效如何解决
    当Oracle分区索引失效时,可以尝试以下几种解决方法:1. 重新构建分区索引:使用ALTER INDEX语句来重建分区索引,例如:...
    99+
    2023-08-25
    oracle
  • oracle设置索引失效如何解决
    当Oracle中的索引失效时,可以尝试以下解决方法:1. 重新构建索引:使用ALTER INDEX语句来重新构建索引。例如,ALTE...
    99+
    2023-08-23
    oracle
  • Oracle 中如何创建和管理索引
    这篇文章将为大家详细讲解有关Oracle 中如何创建和管理索引,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。  在 Oracle 数据库中,存储的每一行数据...
    99+
    2022-10-18
  • 如何理解ORACLE表统计信息与列统计信息、索引统计信息
    如何理解ORACLE表统计信息与列统计信息、索引统计信息,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 ...
    99+
    2022-10-19
  • 如何深入理解MySQL索引
    这篇文章将为大家详细讲解有关如何深入理解MySQL索引,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。前言当提到MySQL数据库的时候,我们的脑海里会想起几个...
    99+
    2022-10-18
  • 如何理解MySQL索引下推
    本篇内容主要讲解“如何理解MySQL索引下推”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解MySQL索引下推”吧!- 思维导图 -回表操作对于数据库来说...
    99+
    2022-10-18
  • MySQL如何管理创建CREATE表和索引
    小编给大家分享一下MySQL如何管理创建CREATE表和索引,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!SQL语句:   数据库   表 ...
    99+
    2022-10-19
  • 如何理解MySQL的索引技术?
    如何理解MySQL的索引技术?在数据库中,索引是一种提高查询效率的重要技术。MySQL作为一种流行的关系型数据库管理系统,其索引技术的运用能够显著提升查询性能。本文将从索引的定义、类型、创建和优化几个方面来解析MySQL的索引技术。首先,索...
    99+
    2023-10-22
    MySQL 索引技术
  • 如何理解index merge合并索引
    本篇文章给大家分享的是有关index merge合并索引,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。mysql> create ind...
    99+
    2022-10-19
  • python列表索引超出范围如何解决
    当Python列表的索引超出范围时,会抛出`IndexError`异常。为了解决这个问题,可以采取以下几种方法:1. 检查索引值是否...
    99+
    2023-08-18
    python
  • matlab索引超出数组边界如何解决
    当索引超出数组边界时,可以采取以下几种方式解决:1. 检查数组的尺寸和索引的范围是否匹配。确保索引在数组的有效范围内。2. 使用条件...
    99+
    2023-09-15
    matlab
  • php索引超出了数组界限如何解决
    本文小编为大家详细介绍“php索引超出了数组界限如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“php索引超出了数组界限如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。索引超出了数组界限解决方法:在...
    99+
    2023-07-01
  • 如何理解Elasticsearch倒排索引与分词
    本篇内容主要讲解“如何理解Elasticsearch倒排索引与分词”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解Elasticsearch倒排索引与分词...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作