表中数据删除后怎么释放空间?

[复制链接]
查看11 | 回复6 | 2008-5-10 12:57:22 | 显示全部楼层 |阅读模式
SQL> select * from test;
未选定行
已用时间:00: 00: 04.02
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE (Cost=1684 Card=1 Bytes=11

7)
10 TABLE ACCESS (FULL) OF 'TEST' (Cost=1684 Card=1 Bytes=

117)


Statistics
----------------------------------------------------------

0recursive calls

0db block gets
17500consistent gets
17489physical reads

0redo size
321bytes sent via SQL*Net to client
372bytes received via SQL*Net from client

1SQL*Net roundtrips to/from client

0sorts (memory)

0sorts (disk)

0rows processed

原来这个TEST表中有200多万条数据吧..可全部删除后,好象空间没释放一样?具体是何原因?
17500consistent gets
17489physical reads


表结构:
名称
是否为空? 类型
----------------------------------------- -------- ------------------
ID
NOT NULL NUMBER(38)
NAME
VARCHAR2(100)
KIND
VARCHAR2(100)
回复

使用道具 举报

千问 | 2008-5-10 12:57:22 | 显示全部楼层
move一下。
回复

使用道具 举报

千问 | 2008-5-10 12:57:22 | 显示全部楼层
如果没有数据了,执行truncate table tablename
回复

使用道具 举报

千问 | 2008-5-10 12:57:22 | 显示全部楼层
实际上就是高水位的问题hwm,
使用alter table table_name move;
在ORACLE 中 常常会因为经常的UPDATE,DELETE引发高的HWM,严重的查询速度,这里简单叙述,欢迎大家讨论
表在 freelist managent 方式下的高hwm处理方法
--统计数据前需要进行表分析

analyze table ADR_TECH_REGION_2_VALUES compute statistics;

SELECT BLOCKS-EMPTY_BLOCKS FROM ALL_TABLES WHERE TABLE_NAME='ADR_TECH_REGION_2_VALUES' --使HWM下 空的 BLOCK和有数据的BLOCK
SELECT COUNT(DISTINCT SUBSTR(ROWID,1,15)) NUM FROM ADR_TECH_REGION_2_VALUES--使HWM下 有数据的BLOCK


--计算一个table中有多少blocks是不包含数据的
SELECT (1-(B.NUM/A.NUM))*100 AS PERCENT FROM
(SELECT (BLOCKS-EMPTY_BLOCKS) NUM FROM ALL_TABLES WHERE TABLE_NAME='ADR_TECH_REGION_2_VALUES' ) A,
(SELECT COUNT(DISTINCT SUBSTR(ROWID,1,15)) NUM FROM ADR_TECH_REGION_2_VALUES) B

--如何降低hwm;mvoe
alter table ADR_TECH_REGION_2_VALUES move;--物理移动数据,空的BLOCKS不在HWM中,从而减少查询的BLOCKS,从而提高查询的 速度

-- 如果有索引的话,那么需要进行索引重建,因为rowid已经发生改变,之后进行表分析
回复

使用道具 举报

千问 | 2008-5-10 12:57:22 | 显示全部楼层
感谢楼上各位...
SQL> alter table test move;
表已更改。
已用时间:00: 00: 05.00
SQL> select * from test;
未选定行
已用时间:00: 00: 00.01
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE
10 TABLE ACCESS (FULL) OF 'TEST'


Statistics
----------------------------------------------------------

0recursive calls

0db block gets

3consistent gets

0physical reads

0redo size
321bytes sent via SQL*Net to client
372bytes received via SQL*Net from client

1SQL*Net roundtrips to/from client

0sorts (memory)

0sorts (disk)

0rows processed
正常了...
回复

使用道具 举报

千问 | 2008-5-10 12:57:22 | 显示全部楼层
已经讨论过很多了
回复

使用道具 举报

千问 | 2008-5-10 12:57:22 | 显示全部楼层
以前只知道然,不知道其所以然
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行