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

Removing non-adjacent duplicates comparing all fields

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

我能想到的就是在运行 DELETE ADJACENT DUPLICATES FROM itab COMPARING ALL FIELDS 之前简单地按所有字段对整个事物进行排序。是否有更快或更喜欢的替代方案?如果结构将字母数字字段与数字混合,这会导致问题吗?

为了提供上下文,我正在尝试提高遗留程序中一些可怕的 select 逻辑的性能。其中大多数在 5-10 个加入的 table 上运行完整 table 扫描,其中一些是自加入的。我在内存中留下了数十万行,我相当确定其中很大一部分只是重复的。然而,改变实际的 selects 太复杂了,需要 /ex[tp]ensive/ 重新测试。仅删除重复项可能会将运行时间缩短一半,但我想确保重复数据删除本身不会增加太多开销。

我会研究两种方法:

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

  • 对要比较的字段使用 HASHED TABLELOOP 通过数据 table。在散列 table 上使用 READ TABLE .. TRANSPORTING NO FIELDS 来查明该值是否已经存在,如果存在,则将其删除 - 否则将值添加到散列 table.

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