从未排序的标准内部表(非深层结构,任意大)中删除所有精确重复项的最(时间)有效方法是什么?
我能想到的只是在运行DELETE ADJACENT DUPLICATES FROM itab COMPARING ALL FIELDS
之前,按其所有字段对整个事物进行排序。有没有更快或更首选的选择?如果结构将字母数字字段与数字混合,会导致问题吗?
为了提供上下文,我试图提高遗留程序中一些可怕的选择逻辑的性能。其中大多数都在5-10个连接表上运行全表扫描,其中一些是自连接的。我在内存中留下了数十万行,我相当确定它们中的很大一部分只是重复的。但是,更改实际选择太复杂,需要 / ex [tp] ensive / 重新测试。删除重复项可能会减少运行时间,但我想确保重复数据删除本身不会增加太多开销。
答案 0 :(得分:4)
我会研究两种方法:
将原始索引存储在辅助字段中,SORT BY
要比较的字段(可能使用STABLE
),DELETE ADJACENT DUPLICATES
,然后重新SORT BY
存储的索引。
使用HASHED TABLE
对要比较的字段LOOP
进行数据表。在散列表上使用READ TABLE .. TRANSPORTING NO FIELDS
来确定该值是否已存在,如果已存在,请将其删除 - 否则将值添加到散列表中。
我不确定性能,但我建议在两种方法的合理数据集上使用SAT
并比较结果。