首页 文章

Postgresql检查表中是否存在vs唯一约束

提问于
浏览
0

我在hibernate的postgresql数据库中插入了大量包含电话号码和状态(一百万)的记录 . 我正在从文件中读取记录,处理每个记录,并一次插入一个 . 但在插入之前,我需要检查表中是否已存在电话号码和状态的组合 .

在我看来,最快的方法是进行查询并将其限制为1或Exists查询,但我从同事那里获得的另一个建议是在电话号码和状态字段的表格上添加一个唯一约束 . 如果违反了唯一键规则,只需在休眠中捕获异常即可 .

什么是最快最可靠的方法?

1 回答

  • 0

    这取决于是否只有这些列,或者还有其他一些列,例如日期 . 如果您不关心哪个记录将保留在数据库中(例如,您需要最新的数字,状态和日期组合),则创建唯一约束并从插入重复项时引发的异常中恢复 .

    您也可以插入所有重复但有一些主键(id),然后删除所有重复项,但删除所有重复项(分组依据...),然后创建唯一约束 .

    最后一个选项取决于记录的大小 - 如果它只有1M,您可以在应用程序层中过滤它们然后保存它们 .

    所有这些都取决于有多少重复,如果只有少数,使用选项一,如果每个记录可能有10次,也许最后一个选项是最好的(取决于RAM,但你只会持有目前最好的手机记录和状态)

相关问题