国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 数据库 > 数据库应用 > 消除行链接

消除行链接

来源:程序员人生   发布时间:2015-06-01 09:25:13 阅读次数:3153次

行链接
当第1次插入行时,由于行太长而不能容纳在1个数据块中时,就会产生行链接。在这类情况下,oracle会使用与该块链接的1块或多块数据块来容纳该行的数据。行连接常常在插入比较大的行时才会产生,如包括long, long row, lob等类型的数据。在这些情况下行链接是不可避免的。
行迁移
当修改不是行链接的行时,当修改后的行长度大于修改前的行长度,并且该数据块中的空闲空间已比较小而不能完全容纳该行的数据时,就会产生行迁移。在这类情况下,Oracle会将整行的数据迁移到1个新的数据块上,而将该行本来的空间只放1个指针,指向该行的新的位置,并且该行本来空间的剩余空间不再被数据库使用,这些剩余的空间我们将其称之为空洞,这就是产生表碎片的主要

少许的行链接不会对性能有很大的影响,1个大致准则是如果表中超过15%的数据行是行链接的,那末就要注意了

可以再MOVE同时设置更高的PCTFREE

alter table emp move picture 40

使用ANALYZE命令查看行链接情况

@?/rdbms/admin/utlchain.sql

上面的脚本创建了名为chained_rows的表,现在可以运行ANALYZE命令,填充该表

analyze table emp list chain rows

接下来查询chain_rows表

select count(*) from chained_rows where table_name=‘EMP’;

消除行链接:
1.创建1个临时表保存原来存储行链接的行
2.从原始表中删除连接的行
3.将临时表中的数据行插入到原始表中

create table temp_emp as select * from emp where rowid in(select headword from chained_rows where table_name=‘EMP’);
delete from emp where rowid in(select headword from chained_rows where table_name=‘EMP’);
insert into emp select * from temp_emp;
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生