以前没有接触索引组织表,今天从最基础的学习了一下
概念:索引组织表存储结构是按照主键的B-tree结构搭建的。索引组织表中的数据是按照B-tree结
构排序后保存的,不但保存索引值,还保存非索引的值。
普通表和索引组织表的对比
普通表 索引组织表
1. rowid唯一的识别每一行, 主键唯一的识别每一行,主键必须被设定
主键是可选定的设定项目
2.可以与其他表一起保存在簇中 不能够保存在簇中
3.可以包含数据类型为long和lob的字段 可以包含数据类型为lob的字段,不能包含数据类型
为long的字段
4.连续扫描返回所有的行 全索引扫描返回所有的行
首先建表,注意一定要建在主键上
SQL> create table sales(
2 office_cd number(3),
3 qtr_end date,
4 revenue number(10,2),
5 review varchar2(1000),
6 constraint sales_pk primary key(office_cd,qtr_end)
7 ) organization index tablespace users
8 pctthreshold 20
9 including revenue
10 overflow tablespace tools;
表已创建。
--验证索引组织表,IOT中的索引名是以主键名命名的,同时它才是实际的IOT
conn / as sysdba
select * from dba_segments where
segment_type='INDEX' and segment_name='SALES_PK';
--把这些表cache的语句,跟普通的堆表不一样
alter table sales storage(buffer_pool keep) ;
索引组织表的适用情况:
1、 代码查找表。
2、 经常通过主码访问的表。
3、 构建自己的索引结构。
4、 加强数据的共同定位,要数据按特定顺序物理存储。
5、 经常用between…and…对主码或唯一码进行查询。数据物理上分类查询。
经常更新的表不适合iot,因为oracle需要不断维护索引,而且由于字段多索引成本就大。
再深入的下次继续研究吧
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/11244507/viewspace-445555/ ,如需转载,请注明出处,否则将追究法律责任。