Michał Herman Asked: 2017-01-13 02:10:46 +0800 CST2017-01-13 02:10:46 +0800 CST 2017-01-13 02:10:46 +0800 CST Oracle“插入/*+APPEND*/”到空表中 772 我在脚本中有以下代码: execute immediate 'truncate table tab_a drop storage'; insert /*+APPEND*/ into tab_a select (...) 我想知道这个APPEND提示是否会导致任何性能变化,因为表被截断并且存储被丢弃。 欢迎任何信息、提示或资源。 oracle insert 2 个回答 Voted BriteSponge 2017-01-13T02:30:04+08:002017-01-13T02:30:04+08:00 如果不知道更多关于你在做什么是不可能说的。但是,我可以说 APPEND 本质上是做什么的。它将对表进行直接路径插入,这仅意味着它将数据直接写入数据块并绕过缓冲区缓存。因此,通常您会在加载大型数据集时使用提示,而不是仅用于少数记录。有一些事情需要考虑,例如序列化、空间重用等。有关快速列表,请查看 AskTom https://asktom.oracle.com/pls/apex/f?p=100:11:0 ::NO::P11_QUESTION_ID:1211797200346279484。 这是您可以考虑使用的另一种选择,具体取决于您正在做的工作。 Best Answer ibre5041 2017-01-13T03:17:23+08:002017-01-13T03:17:23+08:00 insert /*+APPEND*/绕过缓冲区缓存并直接写入表段。这也意味着表上不应有任何触发器或唯一约束。并且必须满足其他条件,否则提示会被默默忽略。检查查询执行计划。如果您看到LOAD AS SELECT使用了直接路径写入。如果您看到LOAD TABLE CONVENTIONAL,则APPEND提示将被忽略。 看到这个关于约束的答案: https://stackoverflow.com/a/10239578/836215
如果不知道更多关于你在做什么是不可能说的。但是,我可以说 APPEND 本质上是做什么的。它将对表进行直接路径插入,这仅意味着它将数据直接写入数据块并绕过缓冲区缓存。因此,通常您会在加载大型数据集时使用提示,而不是仅用于少数记录。有一些事情需要考虑,例如序列化、空间重用等。有关快速列表,请查看 AskTom https://asktom.oracle.com/pls/apex/f?p=100:11:0 ::NO::P11_QUESTION_ID:1211797200346279484。
这是您可以考虑使用的另一种选择,具体取决于您正在做的工作。
insert /*+APPEND*/
绕过缓冲区缓存并直接写入表段。这也意味着表上不应有任何触发器或唯一约束。并且必须满足其他条件,否则提示会被默默忽略。检查查询执行计划。如果您看到LOAD AS SELECT
使用了直接路径写入。如果您看到LOAD TABLE CONVENTIONAL
,则APPEND
提示将被忽略。看到这个关于约束的答案:
https://stackoverflow.com/a/10239578/836215