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

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

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


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数据类型

是否支持分区

支持分区

不支持分区

是否允许包含虚拟列

可以包含虚拟列

不能包含虚拟列


上一篇:vscode通过跳板机连接远程服务器


下一篇:WSL2 中,hive无法通过localhost;127.0.0.1 方式访问的原因