暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

oracle 索引组织表简单说明二

原创 不吃草的牛_Nick 2023-06-01
226

如同您将在后面关于索引的小节中看到的那样,创建索引可以更有效地査找表中的特定 行。然而,创建索引将带来额外的一些系统开销,因为数据库必须同时维护表的数据行和索引 条目。如果表包含的列并不是很多,并且对表的访问主要集中在某一列上,这时应怎么做呢? 在这种情况下,索引组织表(IOT)可能就是正确的解决方案.IOT以B-树索引的形式存储表中 的行,其中B-树索引的每个节点都包含作为键的(索引)列以及一个或多个非索引列。

IOT最明显的优点在于只需要维护一个存储结构,而不是两个。类似地,表中主键的值只 在IOT中存储一次,而在普通表中则需要存储两次。

然而,使用IOT也有一些缺点。有些表,例如记录事件的表,可能不需要主键,或者在某 些情况下不需要任何键,而IOT则必须有主键。同时,IOT不可以是集群的成员。最后,如果 表中有大量的列,并且在检索表中的行时需要频繁地访问许多列,则IOT可能就不是最佳的解决方案。

使用索引组织表
索引组织表(Index-Organized Table, IOT)是在其中存储整个行的索引,而不仅仅是存储行 的键值。行的主键作为行的逻辑标识符而不是存储行的RowID. IOT中的行没有RowID。

在IOT中,通过它们的主键值按顺序存储行。因此,任何基于主键的范围査询都会受益, 因为行是按顺序存储的(査看本章第8.2节,了解排序普通表中数据的相关步骤)。此外,任何 基于主键的相等査询也会受益,因为表的数据全部存储在索引中。在传统的表/索引组合中,基 于索引的访问需要在索引访问后面跟上表访问.在IOT中,只需要访问IOT,没有任何伴随的索引。

然而,通过使用单个索引访问替代普通的索引/表组合访问获得的性能改进可能非常小, 因为任何基于索引的访问都是非常快速的。为了帮助进一步改进性能,索引组织表提供了额外的特性:
★ 溢出区域: 通过在创建IOT时设置pctthreshold参数,可以分开存储主键数据和行数据。 如果行数据超出块中可用空间的限度,它将动态移动到溢出区域。可以指定溢出区域 位于单独的表空间中,从而改进分布与表相关的I/O的能力。
★ 二级索引: 可以在IOT上创建二级索引。Oracle将使用主键值作为行的逻辑RowID.
★ 减少的存储需求: 在传统的表/索引组合中,相同的键值存储在两个位置中。在IOT中,它们只存储一次,从而减少存储需求。

提示:
当指定溢出区域时,可以使用including column子句来指定将存储在溢出区域中的列(以及表定义中的所有后继列):
create table ord_iot
(order_id number,
order_date date,
order_notes varchar2(1000),
primary key(order_id,order_date))
organization index including order_date
overflow tablespace over_ord_tab
PARTITION BY RANGE (order_date)
(
PARTITION pl VALUES LESS THAN ('01-JAN-2005') TABLESPACE dataOl,
PARTITION p2 VALUES LESS THAN (MAXVALUE) TABLESPACE data02
);

order_date和order_notes都将存储在溢出区域中。

为了创建IOT,可以使用create table命令的organization index子句。在创建IOT时必须指 定主键。在IOT中,可以删除列,或者通过alter table命令的set unused子句将列标记为不活动。

索引组织表的调整问题
类似于索引,在插入、更新和删除值时,IOT可能会逐渐在内部产生存储碎片。为了重新构建IOT,可以使用alter table命令的move子句。在下面的示例中,重新构建了 EMPLOYEE_IOT 表及其溢出区域:
alter table EMPLOYEE_IOT move tablespace DATA overflow tablespace DATA OVERFLOW;

应该避免在IOT中存储长行的数据。一般来说,如果数据长度超过数据库块大小的75%, 则应该避免使用IOT.如果数据库块大小是4KB,并且行的长度超出3KB,则应该考虑使用普 通表和索引,而不是使用IOT。行越长,针对IOT执行的事务越多,就越需要频繁地重新构建IOT

注意:
在IOT中不可以使用LONG数据类型,但可以使用LOB.

本章前面提及,索引影响数据加载速率。为了获得最佳的结果,索引组织表的主键索引应该和连续的值一起加载,从而最小化索引管理的成本。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论