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

时间:2014-07-01 13:43:22

标签: postgresql

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

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

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

1 个答案:

答案 0 :(得分:0)

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

您也可以插入所有带有重复但带有一些主键(id)的所有副本,然后删除所有重复项,但要删除所有重复项(按...分组),然后创建唯一约束。

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

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