我正在开发一个大型数据库,我正在寻找可以加速数据库的一切。问题是:当您在某些字段上有唯一索引时,发出选择请求以检查它是否正常,或者尝试它并在条目已经存在时捕获异常之间的速度有多快?
我做了一些研究,但没有定论。谢谢。
手动检查不会做您认为的那样。(见下文。)
如果您先检查,则每次插入都需要对数据库进行两次往返。它还可能需要可序列化的事务。
无论如何,您必须捕获错误。重复值只是插入时可能出错的一件事;还有很多其他事情可能会出错。
我说只是插入,并捕获错误。
INSERT 之前的 SELECT 的要点是确定数据库中是否已经存在一个值。但是你不能依靠它来工作。这是为什么。
打开两个终端会话(例如),并将它们连接到您的数据库。此表已存在。它是空的。
create table test (
test_id serial primary key,
test_email varchar(15) not null unique
);
Run Code Online (Sandbox Code Playgroud)
A:开始交易;
A: 选择 test_email
从测试
其中 test_email = 'a@b.com';
(0 行)
B:开始交易;
A:插入测试(test_email)
值('a@b.com');
插入 0 1
B: 选择 test_email
从测试
其中 test_email = 'a@b.com';
(0 行)
B:插入测试(test_email)
值('a@b.com');
(等待锁定)
答:提交;
B:错误:重复键值
违反唯一约束...