ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

【DB笔试面试355】在Oracle数据库中,什么是索引组织表?

2021-04-15 12:56:28  阅读:183  来源: 互联网

标签:存储 IOT DB 索引 355 ROWID Oracle 数据 主键


watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=


Q          题目

 

在Oracle数据库中,什么是索引组织表?




     
A          答案          


索引组织表简称索引表(Index-Organized Table,IOT),是把索引和一般数据列全部存储在相同位置上的表结构,是一个存储在索引结构中的表。它的特点是存储慢,读取快。索引组织表(IOT)不仅可以存储数据,还可以存储为表建立的索引。索引组织表的数据是根据主键排序后的顺序进行排列的,这样就提高了访问的速度,但是,这是由牺牲插入和更新性能为代价的(每次写入和更新后都要重新进行排序)。索引组织表的数据存储在与其关联的索引中。索引中存储的是行的实际数据,而不是ROWID,它是基于主键访问数据的。在索引组织表中,索引就是数据,数据就是索引。

CREATE TABLE命令与ORGANIZATION INDEX子句一起用于创建索引组织表,如下例所示:

 CREATE TABLE IND_ORG_TAB_LHR(

       VENCODE NUMBER(4) PRIMARY KEY,

       VENNAME VARCHAR2(20)

     )

     ORGANIZATION INDEX;

通过如下的SQL可以得到所有的IOT表:

SELECT * FROM DBA_TABLES D WHERE D.IOT_TYPE='IOT';

辅助索引(Secondary Indexes)也叫二级索引,是一个建立在索引组织表上的索引。在某种意义上,它是一个索引的索引。辅助索引是一个独立的模式对象,并与索引组织表分开存储。索引表上的辅助索引能够非常有效地访问索引表,这种索引既不是使用主键列也不是使用主键的某个前缀。Oracle构造这种索引使用的是逻辑的行标识符(Logical Rowids),这种ROWIDS是基于表的主键(而不是基于行的物理地址)。这种逻辑ROWIDS包括了一个物理猜想(Physical Guess),它也是一种物理标识符(物理指针),它唯一标识行的块地址,Oracle能使用这些猜想直接对索引表的叶块进行探测,从而避免主键搜索。

通过如下的SQL可以得到所有的辅助索引:

SELECT * FROM DBA_INDEXES D WHERE D.INDEX_TYPE='IOT - TOP';

对于IOT,需要注意以下两点内容:

l 当创建IOT时,必须要设定主键,否则报错。

l 索引组织表实际上将所有数据都放入了索引中。

索引组织表可应用在以下情况:

v 联机事务处理(OLTP)。

v Internet(例如:搜索引擎和门户网络)。

v 电子商务(例如:电子商店和购物目录)。

v 数据仓库。

v 分析应用。

v 经常通过主键访问的表。

v 加强数据的共同定位,要数据按特定顺序物理存储。

v 经常用BETWEEN…AND…或按照主键或唯一键进行查询。

v 数据物理上分类查询。如一张订单表,按日期装载数据,想查单个客户不同时期的订货和统计情况。

索引表和常规表不同之处如下表所示:


常规表(Heap-Organized Table)

索引表(Index-Organized Table)

简介

ROWID唯一标识一行。主键可指定也可不指定(因为已经有ROWID了)

由主键来唯一标识一行,所以,主键必须指定

ROWID

使用物理ROWID,允许使用它创建二级索引

使用逻辑ROWID,允许使用它创建二级索引

访问数据

访问基于物理ROWID(使用物理地址)

访问基于逻辑ROWID(使用主键)

扫描方式

使用顺序扫描,返回所有行

使用全索引扫描,返回所有行,并按主键顺序排列

是否可以被存储在簇中

能被存储在一个簇中

不能被存储在一个簇中

能否含有LONG和LOB

一列中能够含有数据类型为LONG、LOB的数据

能含有LOB数据类型,但不能有LONG数据类型

是否支持分区

支持分区

不支持分区

是否允许包含虚拟列

可以包含虚拟列

不能包含虚拟列


标签:存储,IOT,DB,索引,355,ROWID,Oracle,数据,主键
来源: https://blog.51cto.com/lhrbest/2708054

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有