问题描述
DECLAREN NUMBER(3,0);BEGINdbms_output.put_line('start baking.......');DELETE FROM DEPTBACK;INSERT /* +APPEND */ INTO DEPTBACK SELECT * FROM DEPT;SELECT COUNT(*) INTO N FROM DEPT;DBMS_OUTPUT.PUT_LINE('处理数据 '||N||' 条');dbms_output.put_line('end baking.........');END;看到这样一段代码, /* +APPEND */ 是什么意思啊,没找着答案。
解决方案
The APPEND hint lets you enable direct-path INSERT if your database is running in serial mode. Your database is in serial mode if you are not using Enterprise Edition. Conventional INSERT is the default in serial mode, and direct-path INSERT is the default in parallel mode.In direct-path INSERT, data is appended to the end of the table, rather than using existing space currently allocated to the table. As a result, direct-path INSERT can be considerably faster than conventional INSERT.
解决方案二:
百度知道上的答案http://zhidao.baidu.com/question/339829475.html/*+APPEND*/表示使用新的块(BLOCK),而不使用FREELIST中的块增加插入速度,使用这个hint可以将数据使用直接路径插入到表的高水线之后,由于是连续的没有使用的空间,所以插入速度快。就是说直接插入,减少了搜索块的时间.
解决方案三:
/*+APPEND*/的作用是在表的高水位上分配空间,不再使用表的extent中的空余空间append 属于direct insert,归档模式下append+table nologging会大量减少日志,非归档模式append会大量减少日志,append方式插入只会产生很少的undo不去寻找 freelist 中的free block , 直接在table HWM 上面加入数据。
解决方案四:
在使用了append选项以后,insert数据会直接加到表的最后面,而不会在表的空闲块中插入数据。使用append会增加数据插入的速度。