我正在编写一个程序,该程序将结构化数据作为单个记录从(损坏的)文件中恢复,并将结果收集到 sqlite 数据库中。
该程序被多次调用,恢复参数略有不同。这导致通常从文件中恢复相同但有时不同的数据。
现在,每次我使用不同的参数运行我的程序时,它应该只将新(不同)找到的项目添加到同一个数据库中。
这意味着我需要一种快速的方法来判断每个恢复的记录是否已经存在于数据库中,以便仅当它们在数据库中不存在时才添加它们。
我知道对于我要添加的每条记录,我可以首先对所有列执行 SELECT 以查看数据库中是否已经存在匹配的记录,如果没有找到相同的记录,则仅添加新记录。
但是由于我要添加 10000 条记录,因此对每条记录执行 SELECT 对我来说效率非常低(慢)。
我想知道是否有更聪明的方法来处理这个问题?即,有没有办法告诉 sqlite 我不想要重复的条目,所以它会自动检测并拒绝它们?我知道 UNIQUE 修饰符,但不是因为它仅适用于单列,不是吗?我需要能够说 COL1+COL2+COL3 的组合必须是唯一的。有没有办法做到这一点?
注意:我从不想更新任何现有记录。我只想收集一组不同的记录。
奖金部分 - 性能
在经典的编程语言中,我会使用键值字典,其中键是所有记录值的总和。同样,我可以为每条添加的记录计算一个哈希码,然后首先查看该哈希码。如果没有匹配,那么该记录肯定不在数据库中;如果有匹配项,我仍然需要在数据库中搜索任何重复项。那肯定已经更快了,但我仍然想知道 sqlite 是否可以提高效率。