删除比较所有字段的非相邻重复项

时间:2015-01-07 16:15:36

标签: abap

从未排序的标准内部表(非深层结构,任意大)中删除所有精确重复项的最(时间)有效方法是什么?

我能想到的只是在运行DELETE ADJACENT DUPLICATES FROM itab COMPARING ALL FIELDS之前,按其所有字段对整个事物进行排序。有没有更快或更首选的选择?如果结构将字母数字字段与数字混合,会导致问题吗?

为了提供上下文,我试图提高遗留程序中一些可怕的选择逻辑的性能。其中大多数都在5-10个连接表上运行全表扫描,其中一些是自连接的。我在内存中留下了数十万行,我相当确定它们中的很大一部分只是重复的。但是,更改实际选择太复杂,需要 / ex [tp] ensive / 重新测试。删除重复项可能会减少运行时间,但我想确保重复数据删除本身不会增加太多开销。

1 个答案:

答案 0 :(得分:4)

我会研究两种方法:

  • 将原始索引存储在辅助字段中,SORT BY要比较的字段(可能使用STABLE),DELETE ADJACENT DUPLICATES,然后重新SORT BY存储的索引。

  • 使用HASHED TABLE对要比较的字段LOOP进行数据表。在散列表上使用READ TABLE .. TRANSPORTING NO FIELDS来确定该值是否已存在,如果已存在,请将其删除 - 否则将值添加到散列表中。

我不确定性能,但我建议在两种方法的合理数据集上使用SAT并比较结果。