首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在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)。

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

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

v数据仓库。

v分析应用。

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

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

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

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

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

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180205B07K0300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券