oracle堆,Oracle 堆组织表(HOT)

Oracle实际应用中,经常会用到table,对于table的研究自己之前并没有过多的参与, 最近读了一下tom的书后,对table又有了一点新的认识.

table在Oracle中被分为很多的类种,我们平时在create table时,最常用到的类型就是堆组织表了(HOT),那么heap我们都知道是一种经典的数据结构,是一块磁盘或内存的空间,那么在应用上是按照一种显示随机的方式进行管理的,由于这样的特性致使用户可能不能按照表中插入的顺序来获得表中的数据,除非在表中增加一个可以order by排序的列,那么在获取数据的时候才有可能按照insert的顺序来获取. 其实可以用一句话来形容堆组织表就是对于表中的block,只要是能够存储数据,那么就会把新数据存放在可用空间里面而可能完全忽略了实际insert的顺序.因此在做FTS时,oracle会按照实际命中行的顺序来获取数据,而不是按照insert的顺序.所以我们可以说HOT表是一种无序的数据集合:

下面看一个小实验:

SQL> select * from v$version;

BANNER

----------------------------------------------------------------

Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi

PL/SQL Release 10.2.0.3.0 - Production

CORE    10.2.0.3.0      Production

TNS for IBM/AIX RISC System/6000: Version 10.2.0.3.0 - Productio

NLSRTL Version 10.2.0.3.0 - Production

SQL> show parameter db_block_size;

NAME                                 TYPE        VALUE

------------------------------------ ----------- --------------------------

db_block_size                        integer     8192

SQL> create table t

2  (a int,

3   b varchar2(4000) default rpad('*',4000,'*'),

4   c varchar2(3000) default rpad('*',3000,'*')

5  );

Table created.

--对于默认的create table方式生成的表类型是HOT.

SQL> insert into t(a) values(1);

1 row created.

SQL> insert into t(a) values(2);

1 row created.

SQL> insert into t(a) values(3);

1 row created.

SQL> select a from t;

A

----------

1

2

3

SQL> delete from t where a=2;

1 row deleted.

SQL> select a from t;

A

----------

1

3

SQL> insert into t(a) values(4);

1 row created.

SQL> select a from t;

A

----------

1

4

3

另外在create table时相对于堆组织表来说有一些参数可以供我们参考:

对于ASSM有两个重要选项,对于MSSM有四个重要选项:

Freelist:仅适用于MSSM,对于ASSM由于已经使用三级位图的方式来管理segment,因此不适用于ASSM

PCTFREE: ASSM和MSSm都适用,表示为一个block中已存在的行在将来更新时预留出的一段空间.

PCTUSED: 仅适用于MSSM,当块中的空闲程度>(1-PCTUSED)时候,这个block将会重新回到freelist上来.

INITRANS: ASSM和MSSM都适用,表示为block分配的初始slot数目.默认是2,每一个slot占据的空间是23-24个字节

这里还需要强调的是,单独存储在LOB Segment中的数据是不使用PCTFREE/PCTUSED这些参数的.而是以另外一种方式来进行管理.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值