高水位线实验

高水位线实验:

-- 创建test3表
SQL> create table test3 as 
2 select * from dba_objects where 1 = 2;
Table created
-- 查看表中分配块,区大小
SQL> SELECT segment_name, segment_type, blocks, extents --blocks -- 分配数据块数, extents -- 分配区块数 
2 FROM dba_segments
3 WHERE segment_name = 'TEST3';

SEGMENT_NAME SEGMENT_TYPE BLOCKS EXTENTS
------------------------------------- ---------- ----------
TEST3 TABLE 8 1



-- 分析表TEST3表
SQL> ANALYZE TABLE TEST3 ESTIMATE STATISTICS; 
Table analyzed

-- 查询TEST3表高水位线
SQL> SELECT blocks -- 高水位线(占用TEST3表数据块数), empty_blocks -- TEST3表空闲块数, num_rows 
2 FROM user_tables
3 WHERE table_name = 'TEST3';
BLOCKS EMPTY_BLOCKS NUM_ROWS
---------- ------------ ----------
0 7 0


-- 因为未向TEST3表中插入任何数据,因此此表的高水位线为0,现向TEST3表中插入数据再观察
SQL> insert into test3 
2 select * from dba_objects;
50361 rows inserted
SQL> commit;
Commit complete


-- 重新分析表
SQL> ANALYZE TABLE TEST3 ESTIMATE STATISTICS; 
Table analyzed


-- 再次查看表中分配块,区大小
SQL> SELECT segment_name, segment_type, blocks, extents 
2 FROM dba_segments
3 WHERE segment_name = 'TEST3';

SEGMENT_NAME SEGMENT_TYPE BLOCKS EXTENTS
--------------------------------------- ---------- ----------
TEST3 TABLE 8 1
TEST3 TABLE 768 21

此时看到BLOCKS数已增长到768, 也就是Oracle分配给TEST3表768个数据块,21个区
-- 再次查看TEST3表高水位线
SQL> SELECT blocks, empty_blocks, num_rows 
2 FROM user_tables
3 WHERE table_name = 'TEST3';

BLOCKS EMPTY_BLOCKS NUM_ROWS
---------- ------------ ----------
689 78 50361

已增长到689个块, 还有78个空闲块,689 + 78 = 767, 比分配的少1个数据块,是因为这一个数据块是用作segment header

-- 现将TEST3表delete,在查看高水位线
SQL> delete from test3; 
50361 rows deleted
SQL> commit;
Commit complete
SQL> ANALYZE TABLE TEST3 ESTIMATE STATISTICS;
Table analyzed
SQL>
SQL> SELECT blocks, empty_blocks, num_rows
2 FROM user_tables
3 WHERE table_name = 'TEST3';

BLOCKS EMPTY_BLOCKS NUM_ROWS
---------- ------------ ----------
689 78 0


发现此表高水位线并未减少,证明delete只是删除表中数据块的记录,但并不会使表中的高水位线下降, 在进行全表扫描时会Oracle会扫描表中高水位线下的所有数据块,
因此数据虽然被删除了,但查询时有可能还是很慢。所以在进行大表删除时应使用truncate语句,看下面实验:
SQL> truncate table test3; 
Table truncated
SQL> ANALYZE TABLE TEST3 ESTIMATE STATISTICS;
Table analyzed
SQL>
SQL> SELECT blocks, empty_blocks, num_rows
2 FROM user_tables
3 WHERE table_name = 'TEST3';
BLOCKS EMPTY_BLOCKS NUM_ROWS
---------- ------------ ----------
0 7 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值