我目前正在学习ABAP,谁能解释为什么t_table2 = t_table1
比APPEND LINES OF t_table1 TO t_table2
快得多?
t_table1,t_table2是内部表
答案 0 :(得分:2)
我不能说这是一个完整的原因(可能还有更多我不知道的幕后故事),但是某些原因肯定包括以下原因。 这里要注意的一点:在中小型数据集上,速度差异可以忽略不计。
t_table2 = t_table1
仅获取并复制所有数据,覆盖t_table2
(不是append
)。在某些情况下(例如,传递参数时),甚至不会复制数据。可以使用相同的数据,并且仅当需要更改t_table2时才会生成副本。
APPEND LINES OF t_table1 TO t_table2
基本上是一个循环,它逐行追加记录。
我之所以提到append
的原因是,表的覆盖可以像从a
到b
的复制数据(在极少数情况下为数据引用)一样简单,而append执行检查表是否已排序,索引等。即使表处于最基本的状态,内部表的追加过程也比覆盖变量要复杂一些。
答案 1 :(得分:2)
除了Zero和Cameron Smith的答案之外,还有一个概念称为“ table sharing”(又名“ copy-on-write”),该概念将复制延迟到源表或目标内部表中的任何一个改变了。
如果我简化很多,可以像分配8字节(源内部表的地址)那样分配它。无论如何,大多数时候,两个内部表之一都会被更改(否则,为什么在代码中会有一个副本!),所以最终的性能通常几乎是相同的,只是有时候由于某些原因会有好处。代码“严重”。
答案 2 :(得分:0)
因为追加行的工作方式类似于循环,并且逐行执行操作。
t_table2 = t_table1是浅表副本。
在将对象的每个成员分配给另一个对象的过程中,浅拷贝与深拷贝(附加行)相似,但是在引用类型字段的复制方式上有所不同。与仅复制引用的浅表复制不同,在深表复制中,将创建所引用对象的新副本。
答案 3 :(得分:0)