Unix删除Duplicate uniq vs Sybase - ignore_dup_key

时间:2014-11-30 13:22:01

标签: unix sybase

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

  1. 编写shell脚本以删除重复项,文件将在unix框中上传。
  2. 使用ignore_dup_key在sybase中创建一个表,并将该文件的BCP创建到表中。这样表就可以消除重复。
  3. 我读过重复百分比增加时,ignore_dup_key会影响性能。 Unix的性能怎么样 - uniq方法?哪一个适用于此?

    欢迎输入!

2 个答案:

答案 0 :(得分:2)

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

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

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

为了进一步阅读,我的书“Sybase ASE的技巧,诀窍和配方”有几个专门讨论ignore_dup_key的部分。

答案 1 :(得分:1)

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