从sqlite数据库中删除重复的行

Pat*_*hes 90 sql database sqlite

我有一个巨大的表--3600万行 - 在SQLite3中.

在这个非常大的表中,有两列

  • 哈希 - 文本
  • d - 真的

但是,有些行是重复的.也就是说,hash和d都具有相同的值.

此外,如果两个哈希值相同,则d的值也相同,但两个相同的ds不表示两个相同的哈希值

无论如何,我想删除重复的行.我没有主键列.最快的方法是什么?


编辑: hash

似乎可以做到这一点.

And*_*mar 115

您需要一种方法来区分行.根据您的评论,您可以使用特殊的rowid列.

要通过保持最低rowid每个删除重复项(hash,d):

delete   from YourTable
where    rowid not in
         (
         select  min(rowid)
         from    YourTable
         group by
                 hash
         ,       d
         )
Run Code Online (Sandbox Code Playgroud)


MaD*_*aDa 5

我想最快的是使用非常数据库:添加一个具有相同列的新表,但是有适当的约束(哈希/真实对上的唯一索引?),迭代原始表并尝试插入记录新表,忽略约束违规错误(即在引发异常时继续迭代).

然后删除旧表并将新表重命名为旧表.

  • 我想,这不像简单地更改表那么优雅,但是您的方法的一个真正好处是您可以根据需要多次重新运行它,而无需触摸/破坏源数据,直到您对结果绝对满意为止。 (2认同)