博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【练习】行迁移和行链接
阅读量:4970 次
发布时间:2019-06-12

本文共 2654 字,大约阅读时间需要 8 分钟。

行链接发生在INSERT阶段数据块无法容纳过大数据时,行迁移发生在UPDATE阶段时原数据块无法容纳增大的数据时。

因为需要扫描更多的数据块才能得到所需的信息,所以行链接和行迁移会导致系统的查询效率降低。行迁移和行链接都会导致oracle性能下降。

 

例一行链接:

①创建测试表 SQL> create table t_row_chaining (x char(2000),y char(2000),z char(2000),q char(2000));Table created.②插入初始数据SQL> insert into t_row_chaining values('a','b','c','d');1 row created.SQL> commit;Commit complete.③使用ANALYZE命令对表t_row_chaining进行分析,以便验证该表是否发生了行链接。
SQL> ANALYZE TABLE t_row_chaining LIST CHAINED ROWS;ANALYZE TABLE t_row_chaining LIST CHAINED ROWS*ERROR at line 1:ORA-01495: specified chain row table not found(原因是CHAINED_ROWS表没有创建导致)
④使用Oracle自带的utlchain.sql脚本创建CHAINED_ROWS表,并再次分析表
SQL> @?/rdbms/admin/utlchain.sqlTable created.SQL> ANALYZE TABLE t_row_chaining LIST CHAINED ROWS;Table analyzed.⑤测试行链接,由于初始化的数据无法在一个数据块中存放(因为测试表所有字段都为char类型所致),此时发生了行链接。
SQL> select owner_name,table_name,head_rowid,analyze_timestamp from chained_rows;OWNER_NAME                     TABLE_NAME                     HEAD_ROWID------------------------------ ------------------------------ ------------------ANALYZE_T---------SYS                            T_ROW_CHAINING                 AAAVolAABAAAWOiAAA10-OCT-16

 

 

 

例二行迁移:

①创建测试表 SQL> create table t_row_migrating (x varchar2(2000),y varchar2(2000),z varchar2(2000),q varchar2(2000));Table created.
②插入初始化数据
SQL> insert into t_row_migrating values('a','b','c','d');1 row created.SQL> commit;Commit complete. ③此时由于是VARCHAR2类型的字段(此类型字段可以自适应数据的长短),此时数据完全可以在一个数据块中存放,因此此时不会发生行链接。分析表t_row_migrating,并验证是否存在行链接。
SQL> ANALYZE TABLE t_row_migrating LIST CHAINED ROWS;Table analyzed.SQL> select owner_name,table_name,head_rowid,analyze_timestamp from chained_rows;(还是刚才测试行链接时的记录)OWNER_NAME                     TABLE_NAME                     HEAD_ROWID------------------------------ ------------------------------ ------------------ANALYZE_T---------SYS                            T_ROW_CHAINING                 AAAVolAABAAAWOiAAA10-OCT-16④我们使用t_row_chaining中的大数据对表t_row_migrating进行更新,使之发生行迁移。
SQL> update t_row_migrating set (x,y,z,q)=(select * from t_row_chaining);1 row updated.SQL> commit;Commit complete.⑤对表t_row_migrating进行分析,并验证行链接
SQL> ANALYZE TABLE t_row_migrating LIST CHAINED ROWS;Table analyzed.SQL> select owner_name,table_name,head_rowid,analyze_timestamp from chained_rows;OWNER_NAME                     TABLE_NAME                     HEAD_ROWID------------------------------ ------------------------------ ------------------ANALYZE_T---------SYS                            T_ROW_CHAINING                 AAAVolAABAAAWOiAAA10-OCT-16SYS                            T_ROW_MIGRATING                AAAVonAABAAAW8JAAA10-OCT-16
 

 

 

转载于:https://www.cnblogs.com/tomatoes-/p/5954712.html

你可能感兴趣的文章
概率期望总结
查看>>
php中的empty()方法
查看>>
OpenJ_Bailian 4118(dp)
查看>>
三、TortoiseGit之配置密钥
查看>>
Python----面向对象---绑定方法与非绑定方法
查看>>
java Thread
查看>>
[源码和文档分享]基于Android实现的页面置换模拟
查看>>
JavaWeb学习(一) ---- HTTP以及Tomcat的安装及使用
查看>>
java学习之JDBC
查看>>
基于人脸识别云相册应用源码
查看>>
jQuery简介
查看>>
「LibreOJ NOI Round #1」验题
查看>>
[HNOI2015]菜肴制作
查看>>
[ubunut]打造Ubuntu下Java开发环境 (转)
查看>>
当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。
查看>>
《大道至简》第六章读后感
查看>>
fdisk创立主分区过程
查看>>
批量插入数据
查看>>
如何获取配置文件Web.config的AppSetting节点数据
查看>>
http协议之request
查看>>