我在SQLite3中有一个巨大的表——3600万行.在这个非常大的表中,有两列:

  • hash-文本
  • d-真的

有些行是重复的.也就是说,hashd都有相同的值.如果两个哈希相同,那么d的值也相同.然而,两个相同的d并不意味着两个相同的hash.

我要删除的行.我没有主键列.

最快的方法是什么?

推荐答案

你需要一种区分行的方法.根据你的 comments ,你可以用特别的rowid column.

要删除重复项,请保留最低的rowid个/(hash,d):

delete   from YourTable
where    rowid not in
         (
         select  min(rowid)
         from    YourTable
         group by
                 hash
         ,       d
         )

Sql相关问答推荐

基于时间的SQL聚合

数据库索引:如何使用名称和类别对项目进行最佳索引?

在SQL中返回缺省值,即使查询不返回任何结果

为什么我的SQL标量函数有时会抛出";子查询返回多个值.这是不允许的.

Redshift PL/pgSQL循环中的参数化列名

ColdFusion+Docker:未安装SQLSERVER包

需要从键-值对数据中提取值

在SQL中转换差异表的多列

从输出中删除 jsonb_build_object

具有多个表 JOINS 的 STRING_AGG 的替代方法 (SQL Server 2016)

Postgresql 生成器列导致语法错误

将一名成员金额分配给群组内的其他成员

如何在第二个 INSERT 中使用第一个 INSERT 自动生成的 ID

将varchar (7)列转换为datetime

更新之前如何获得价值

使用给定的变量对在循环中执行更新语句

如何显示最常引用条目的详细信息

根据潜在空值的条件对记录进行计数

SQL/Postgres:按日期和其他属性对相关性能进行分组

SQL Group By 然后映射出是否存在值