索引组织表

--------------------索引组织表(IOT)
可以将索引和表数据一起存储在一个表中,该表称为索引组织表.
IOT是在中存储整个行的索引,而不仅仅是存储行的键值。行的主键作为行的逻辑标识符而不是存储行的ROWID。
IOT中没rowid。由于IOT中整个行存储为索引本身,因此没有用于每个行的rowid,主键用来标识一个IOT中的行。
于此不同,oracle根据主键的值来创建逻辑rowid。逻辑rowid用于支持IOT的二级索引。
在创建IOT时,必须指定主键,IOT可以分区.
IOT消除了使用表和它对应的索引的需要,而使用一个单独的结构来替代他们,该结构看起来像索引但又像表一样包含数据。
<在传统的表/索引组合中,基于索引的访问需要在索引访问后面跟上表访问>在IOT中,只需访问IOT,没有任何伴随的索引。
create table sales(sales_date date,sales_id number,total_sales nubber(18,2),constraint ssbd_pk primary key(sales_date,dept_id))organization index tablespace prd04;
三列都存储在每个IOT的行中,但是只根基日期和部门编号来创建IOT,只使用一个段来存储一个IOT,如果在该IOT建立二级索引,将会创建一个新段。
-----------------IOT益处
(1)使用IOT可以显著地减少磁盘空间的使用,因为不需要存储索引列两次(一次存储在表中,一次在索引中)。相反,只需将他们和其他任何非所晕的列存储在IOT中一次。
(2)在IOT中,通过他们的主键值按顺序存储行,因此任何基于主键范围查询都会受益。因为行时按顺序存储的,此外,任何基于主键的相等查询也会受益,因为表的数据全部存储在索引中。
(3)IOT适合用于基本的访问是通过主键的那些表,但允许在IOT的其他列上创建索引以改善通过这些列的访问性能。
---------索引组织表提供了额外的特性:
1).溢出区域:
通过在创建IOT时设置pctthreshold参数,可以分开存储主键和行数据,如果行数据超出块中的可用空间的限度。
它将动态移动到溢出区域,可以指定溢出区域位于单独的表空间,从而改进分布与表明相关的I/O能力。
2).二级索引
可以在IOT上创建二级索引。oracle将使用主键值作为行的逻辑。
3).减少的存储需求:
在IOT中,他们只存储一次,从而减少存储需求,在传统的表/索引组合中,相同的键值存储在两个位置中。

-----------IOT的调整问题
IOT可能经常在内部产生存储碎片,为了重新构建IOT,可以使用alter table employee_iot move tablespace data overflow tablespace data_overflow.
应该避免在IOT中存储长度的数据,一般来说,如果数据长于数据快大小的75%,则应该避免IOT,如果数据库块大小时4kb,并且行的长度超出3kb,则应该考虑普通表和索引的使用,而不是使用IOT。
行越长,针对IOT就要执行更多的事务,从而需要更频繁地重新构建IOT。
索引影响数据加载率,为了获得最佳结果,索引组织表的主键索引应该和连续的值一起加载,从而最小化索引管理成本。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值