Oracle append Hint(一)
来源:互联网 发布:windows server 2014 编辑:程序博客网 时间:2024/05/17 23:14
在执行数据插入或数据加载时,可以通过append Hint的方式进行数据库直接加载,可以在insert的SQL语句里面使用append,比如:insert/*+append*/ into t select * from dba_objects;
Oracle执行直接加载时,数据直接追加到数据段的最后,不需要花费时间在段中寻找空闲,数据不经过Data Buffer直接写到数据文件中,效率自然比传统的加载方式要高。
首先看一个直接加载的例子,用来演示直接加载的机制:
sys@ORCL> create table t
2 as
3 select * from dba_objects whererownum<2000;
Table created.
sys@ORCL> select segment_name,extent_id,bytes
2 from user_extents
3 where segment_name='T';
SEGMENT_NA EXTENT_ID BYTES
---------- ---------- ----------
T 0 65536
T 1 65536
T 2 65536
T 3 65536
现在T表分配了4个extent,然后删除所有的行,再查看T表所分配的extent:
sys@ORCL> delete from t;
1999 rows deleted.
sys@ORCL> commit;
Commit complete.
sys@ORCL> select segment_name,extent_id,bytes
2 from user_extents
3 where segment_name='T';
SEGMENT_NA EXTENT_ID BYTES
---------- ---------- ----------
T 0 65536
T 1 65536
T 2 65536
T 3 65536
可以看到此时T表仍然占有4个extent,因为delete操作不会收缩表占用的空间。此时用传统的方式再往T表插入数据:
sys@ORCL> insert into t
2 select * from dba_objects whererownum<2000;
1999 rows created.
sys@ORCL> commit;
Commit complete.
sys@ORCL> select segment_name,extent_id,bytes
2 from user_extents
3 where segment_name='T';
SEGMENT_NA EXTENT_ID BYTES
---------- ---------- ----------
T 0 65536
T 1 65536
T 2 65536
T 3 65536
此时T表仍然分配了4个extent,数据被分到已有的空闲的空间里面。删掉数据:
sys@ORCL> delete from t;
1999 rows deleted.
sys@ORCL> commit;
Commit complete.
sys@ORCL> select segment_name,extent_id,bytes
2 from user_extents
3 where segment_name='T';
SEGMENT_NA EXTENT_ID BYTES
---------- ---------- ----------
T 0 65536
T 1 65536
T 2 65536
T 3 65536
此时T表里面已经没有数据,分配的4个extent都为空闲的区。接着使用直接加载方式即:append Hint,往T表插入数据:
sys@ORCL> insert/*+append*/ into t
2 select * from dba_objects whererownum<2000;
1999 rows created.
sys@ORCL> commit;
Commit complete.
sys@ORCL> select segment_name,extent_id,bytes
2 from user_extents
3 where segment_name='T';
SEGMENT_NA EXTENT_ID BYTES
---------- ---------- ----------
T 0 65536
T 1 65536
T 2 65536
T 3 65536
T 4 65536
T 5 65536
T 6 65536
我们看到使用直接加载方式后,T表分配的extent增加了。直接加载的数据放在表的高水位线(High Water Mark,HWM)以上,当直接加载完成后,Oracle将表的高水位线移到新加入的数据之后,这样新的数据就可以被用户使用了。
- Oracle append Hint(一)
- Oracle append Hint(二)
- Oracle append Hint(三)
- Oracle append Hint(四)
- Oracle中常见的Hint(一)
- 关于oracle数据库,表空间,表级的logging属性与hint append
- Oracle Hint
- Oracle Hint
- Oracle Hint
- oracle hint
- oracle Hint
- Oracle Hint .
- Oracle Hint
- Oracle HINT
- oracle hint
- oracle hint
- Oracle Hint
- Oracle Hint
- c#资源管理器 非递归算法遍历所有文件
- hibernate学习笔记(1)
- SVN Tree Conflict 的分析
- IOS开发UI篇之──键盘添加工具条
- svn merge脚本
- Oracle append Hint(一)
- Debian Linux 系统安装完成后的配置
- iphone检测耳机插入/拔出
- svn merge和branch
- CentOS Samba 服务器 配置
- 理解守护进程
- windows 7下安装sipp3.2
- 自定义语言的实现——解释器模式(一)
- 游戏做任务的基本流程