【问题标题】:Unix Remove Duplicate uniq vs Sybase - ignore_dup_keyUnix 删除重复的 uniq 与 Sybase - ignore_dup_key
【发布时间】:2015-06-06 08:51:52
【问题描述】:

我有一个包含 2000 万条记录的文件。它有 30% 的重复值。 我们考虑实施两种方法。

  1. 编写 shell 脚本删除重复文件,文件将上传到 unix box。
  2. 在 sybase 中使用 ignore_dup_key 和 BCP 将文件按原样创建到表中。以便表格消除重复项。

我已经阅读过,当重复百分比增加时,ignore_dup_key 会影响性能。 Unix - uniq 方法的性能如何?哪一个适用于此?

欢迎输入!

【问题讨论】:

  • 我会选择选项 2。不想重新发明轮子。由于您要在表上创建索引,因此请务必使用-B 提及事务的批量大小。

标签: unix sybase


【解决方案1】:

对具有 ignore-dup-key 唯一索引的表执行 BCP 应该是最快的,而不是排在最后,因为它更容易实现。

原因如下:最终,在任何一种情况下,您最终都会将一组行插入到数据库表中,并为这些插入的行建立索引。这两种情况的工作量是相等的。 现在,BCP 方法使用现有索引来识别和丢弃重复键。这在 ASE 中得到了非常有效的处理,因为该行在插入之前 被丢弃。如果您只想丢弃重复项(无论是谁说的被错误地告知),重复项的数量不会影响此效率。 如果您要在 ASE 之外进行重复过滤,则需要找出一种排序方法,该方法根据记录的一部分的唯一性(只有它们的键)丢弃记录。这并不像听起来那么简单,而且还需要系统资源来执行排序。最好将这些资源用于在 ASE 中进行排序(=索引创建)——对于最终插入的行,无论如何您都必须这样做。

无论如何,BCP 方法比外部排序要方便得多,因为它需要您做的工作更少(步骤更少)。这可能是一个更重要的考虑因素。

为了进一步阅读,我的书“Sybase ASE 的提示、技巧和秘诀”有几个部分专门介绍了 ignore_dup_key。

【讨论】:

    【解决方案2】:

    如果不测试这两种方法,您无法确定哪种方法更快。但是使用 sybase 方法可能会更快,因为数据库已优化并行化您的工作负载。

    【讨论】:

      猜你喜欢
      • 2012-09-22
      • 2017-12-11
      • 2020-01-17
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      相关资源
      最近更新 更多