假设您有任何插入查询,如下所示 -
insert into abc select * from def dd where not exists (select 1 from abc aa where aa.id = dd.id);
Run Code Online (Sandbox Code Playgroud)
VS
insert into abc select * from def dd on conflict(id) do nothing;
Run Code Online (Sandbox Code Playgroud)
哪一个更快?
两个表都非常大,如果与主键发生冲突,则不插入
哪个更快并不是真正相关的.实际上,两者都应该是非常可比的,因为两者都将使用唯一索引来查找值.
更重要的是,这NOT EXISTS在语义上是不正确的.竞争条件可能导致两个查询都失败了NOT EXISTS...然后两者都会尝试插入相同的值.
因此,为了安全起见,我强烈建议使用该ON CONFLICT配方.它确保数据库确保数据的一致性.