oracle sql 高级编程学习笔记(九)

一,高水位线定义

高水位线好比水库中储水的水位线,用于描述数据库中段的扩展方式。高水位线对全表扫描方式有着至关重要的影响。当使用delete 操作
表记录时,高水位线并不会下降,随之导致的是全表扫描的实际开销并没有任何减少。下图给出高水位线的描述,如何降低高水位线,以及高水位线对全表扫描的影响。
这里写图片描述

二、实例演示

创建表t1_bak
这里写图片描述

收集t1_bak表 统计信息

 exec dbms_stats.gather_table_stats('SYS','T1_BAK');

这里写图片描述
查看t1_bak 表块信息
这里写图片描述

插入数据
这里写图片描述

收集统计信息 可以看出数据块数目已经变成了172
这里写图片描述

查看执行计划
select count(1) from t1_bak 有 186个逻辑读取

这里写图片描述

删除数据,删除数据后表中只剩下900条数据
这里写图片描述

重新收集统计信息发现,t1_bak表还是 有172个块
这里写图片描述

再看执行计划
这里写图片描述

逻辑读有 180个,比 删除数据前只少了6个
修改高水位线

alter table t1_bak move //并不会影响CF(聚簇因子)的值,该功能只是移动高水位线,且不释放空间
方法二: 如果表空间是local的 无法执行
--alter table table_name enable row movement; alter table table_name shrink space; 

这里写图片描述

--压缩块后所有索引都会失效,需要重建一下索引 ,本例没有创建索引
ALTER INDEX INDEX_NAME REBUILD;

改完后再看数据块 数据块已经为14个;

-- 扩展查看实际使用的块
SELECT COUNT(DISTINCT DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)) USED_BLOCK
  FROM  t1_bak

这里写图片描述

执行计划 逻辑读减为21个,且成本变为了6
这里写图片描述

总结: 对于频繁加载和清除的表(使用delete而不是truncate),由于受到高水位线的影响,表的响应时间会越来越慢,所以尽量选择truncate。truncate不影响高水位线。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜菜的中年程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值