行链接和行迁移

今天看书看到关于行链接和行迁移的部分,突然想到一个有趣的情况:
数据块的大小为:8k
创建了一个有8个列的一个表,每个列的字段全为CHAR(2000),并且设置pctfree 20
这时先向表中插入一条记录a,给两个字段赋制值,那么这条记录a大概占用了4k。
然后向表中插入一条记录b,给一个字段赋值,那么记录b大概占用了2k。[@more@]

今天看书看到关于行链接和行迁移的部分,突然想到一个有趣的情况:
数据块的大小为:8k
创建了一个有8个列的一个表,每个列的字段全为CHAR(2000),并且设置pctfree 20
这时先向表中插入一条记录a,给两个字段赋制值,那么这条记录a大概占用了4k。
然后向表中插入一条记录b,给一个字段赋值,那么记录b大概占用了2k。
a+b=6k,此时差不多刚好满足pctfree的要求,如果在添加新记录的时候会插入的下一个数据库中。
如果更新a或b的时候可以占用那20%的预留。
实验一:更新记录b,使记录b增长到2个字段,这个时候会占用那20%的预留,这个块可以容纳下
这个两条记录,不发生行迁移。
实验二:更新记录b,使记录b增长到3个字段,这个时候那20%的预留不足以容纳b的增长,这个时候
会发生行迁移,整条记录b被迁移到下一个数据块
实验三:更新记录b,使记录b增加到5个字段,这个时候那20%的预留不足以容纳b的增长,按理来说
会发生行迁移,可是此时没有没发生行迁移,最后的结果比较类似于行链接。

猜想原因:如果此时发生的是行迁移的话,新的记录b会被迁移到下一个数据库,而记录b的大小为
10k左右,下一个块也不够容纳,只能在发生行链接。这样查询的记录b的话就要关联三个数据块,
效率比较低下。而如果不发生行迁移的话,记录b正好可以被这两个块容纳,查询b的时候仅仅需要
关联两个数据块,相对第一种情况效率高。oracle在行迁移的时候会根据实际情况进行优化,总是
以一种比较合理的方式来存储数据。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8394333/viewspace-987136/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8394333/viewspace-987136/

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值