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

Postgresql检查表中是否存在vs唯一约束,postgresql,Postgresql,我在hibernate的postgresql数据库中插入了大量包含电话号码和状态的记录。我从一个文件中读取记录,对每个记录进行处理,然后一次插入一个记录。但是在插入之前,我需要检查表中是否已经存在电话号码和状态的组合 在我看来,最快的方法是执行一个查询并将其限制为1,或者限制为Exists查询,但我从同事那里得到的另一个建议是在电话号码和状态字段的表上添加一个唯一约束,如果违反了唯一键规则,只需在hibernate中捕获异常 关于什么是最快和最可靠的方法有什么想法吗?这取决于是否只有这些列,或者

我在hibernate的postgresql数据库中插入了大量包含电话号码和状态的记录。我从一个文件中读取记录,对每个记录进行处理,然后一次插入一个记录。但是在插入之前,我需要检查表中是否已经存在电话号码和状态的组合

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


关于什么是最快和最可靠的方法有什么想法吗?

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

您还可以插入所有具有重复项但具有某些主键id的重复项,然后删除所有重复项,但不包括您希望具有“分组依据…”的重复项,然后创建唯一约束

最后一个选项取决于记录的大小——若只有1M,你们可以在应用层过滤它们,然后保存它们

所有这些都取决于有多少重复,如果只有很少,请使用选项一,如果每条记录可能出现10次,根据RAM,最后一个选项可能是最好的,但您将只保留当前电话和状态的最佳记录

同时执行这两项操作。存在查询和唯一约束。