create
table
indexTable(
ID
varchar2
(
10
),
NAME
varchar2
(
20
),
constraint
pk_id
primary
key
(
ID
)
)
organization
index
;式
注意两点:
● 创建IOT时,必须要设定主键,否则报错。
● 索引组织表实际上将所有数据都放入了索引中。
索引组织表属性
1、OVERFLOW子句(行溢出)
因为所有数据都放入索引,所以当表的数据量很大时,会降低索引组织表的查询性能。此时设置溢出段将主键和溢出数据分开来存储以提高效率。溢出段的设置有两种格式:
PCTTHRESHOLD n :制定一个数据块的百分比,当行数据占用大小超出时,该行的其他列数据放入溢出段
INCLUDING column_name :指定列之前的列都放入索引块,之后的列都放到溢出段
● 当行中某字段的数据量无法确定时使用PCTTHRESHOLD。
● 若所有行均超出PCTTHRESHOLD规定大小,则考虑使用INCLUDING。
create
table
t88(
ID
varchar2
(
10
),
NAME
varchar2
(
20
),
constraint
pk_id
primary
key
(
ID
)
)
organization
index
PCTTHRESHOLD
20
overflow
tablespace
users
INCLUDING
name
;
● 如上例所示,name及之后的列必然被放入溢出列,而其他列根据
PCTTHRESHOLD
规则。
2、COMPRESS子句(键压缩)
与普通的索引一样,索引组织表也可以使用COMPRESS子句进行键压缩以消除重复值。
具体的操作是,在organization index之后加上COMPRESS n子句
● n的意义在于:指定压缩的列数。默认为无穷大。
例如对于数据(1,2,3)、(1,2,4)、(1,2,5)、(1,3,4)、(1,3,5)时
若使用COMPRESS则会将重复出现的(1,2)、(1,3)进行压缩
若使用COMPRESS 1时,只对数据(1)进行压缩
索引组织表的维护
索引组织表可以和普通堆表一样进行INSERT、UPDATE、DELETE、SELECT操作。
可使用ALTER TABLE ... OVERFLOW语句来更改溢出段的属性。
altertable t88 addoverflow; --新增一个overflow