alter table move的用途

降低HWM,消除行移植和行链接。

我们可以通过user_segments 或 user_extents 的blocks来查看hwm

SQL> select segment_name,blocks
  2  from user_segments
  3  where segment_name='SMTDZ';

SEGMENT_NAME         BLOCKS
---------------- ----------
SMTDZ                    16

在usr_extents中查找

SQL> select segment_name,blocks
  2  from user_extents where segment_name='SMTDZ';

SEGMENT_NAME         BLOCKS
---------------- ----------
SMTDZ                     8
SMTDZ                     8

SQL> select count(*) from smtdz;

  COUNT(*)
----------
      1015

SQL> insert into smtdz select * from smtdz;

已创建1015行。

SQL> commit;

提交完成。

SQL> select count(*) from smtdz;

  COUNT(*)
----------
      2030

SQL> select segment_name,blocks
  2  from user_segmentS
  3  where segment_name='SMTDZ';

SEGMENT_NAME         BLOCKS
---------------- ----------
SMTDZ                    24

SQL> select segment_name,blocks from user_extents where segment_name='SMTDZ';

SEGMENT_NAME         BLOCKS
---------------- ----------
SMTDZ                     8
SMTDZ                     8
SMTDZ                     8

可以看到当我们insert into smtdz 一批数据后其blocks增加了,我们再对smtdz进行delete下

SQL> delete from smtdz where rownum<1001;

已删除1000行。

SQL> commit;

提交完成。

SQL> select count(*) from smtdz;

  COUNT(*)
----------
      1030

未对表smtdz进行分析analyze前

SQL> select segment_name,blocks
  2  from user_segments
  3  where segment_name='SMTDZ';

SEGMENT_NAME         BLOCKS
---------------- ----------
SMTDZ                    24

对表smtdz进行分析

SQL> exec dbms_stats.gather_table_stats(ownname=>'IC',tabname=>'SMTDZ');

PL/SQL 过程已成功完成。

SQL> select segment_name,blocks
  2  from user_segments
  3  where segment_name='SMTDZ';

SEGMENT_NAME         BLOCKS
---------------- ----------
SMTDZ                    24

可见分析表只是修改了user_tables里的num_rows值,对hwm并没有影响

SQL> alter table smtdz move;

表已更改。

SQL> select segment_name,blocks
  2  from user_segments
  3  where segment_name='SMTDZ';

SEGMENT_NAME         BLOCKS
---------------- ----------
SMTDZ                    16

从这里可以看到表smtdz的hwm发生了变化,现在只有16个blocks了

 

我们可以用下面的办法来最方便的进行重组,消除row migration:

SQL> alter table t add t1 date default sysdate;
Table altered.

SQL> c/t1/t2
1* alter table t add t2 date default sysdate
SQL> /
Table altered.

SQL> c/t2/t3
1* alter table t add t3 date default sysdate
SQL> /
Table altered.

SQL> analyze table t compute statistics;
Table analyzed.

SQL> select table_name,num_rows,CHAIN_CNT from user_tables where table_name='T';
TABLE_NAME  NUM_ROWS    CHAIN_CNT
-------------  --------------- ---------- 
                  41616              3908

SQL> alter table t move ;
Table altered.

SQL> analyze table t compute statistics;
Table analyzed.

SQL> select table_name,num_rows,CHAIN_CNT from user_tables where table_name='T';
TABLE_NAME NUM_ROWS      CHAIN_CNT
-------------  ---------------- ------------
                  41616                0

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值