ITPub博客

首页 > 数据库 > Oracle > 行链接和行迁移

行链接和行迁移

原创 Oracle 作者:sunwgneuqsoft 时间:2007-12-01 09:27:12 0 删除 编辑
今天看书看到关于行链接和行迁移的部分,突然想到一个有趣的情况:
数据块的大小为: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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    56
  • 访问量
    758725