0

Theoretical question about the impact on performance.

One of the fields in my table is unique. For instance, email_address in the Users table.

What has less of an impact on performance? Attempting to add an already existing email address and getting the error, or doing a search on the email field?

4

2 回答 2

2

UNIQUE 字段可能会更快。

如果你告诉 MySQL 某个字段是唯一的,它可能会执行一些优化。

此外,如果要插入尚未在表中的记录,则可能会遇到一些并发问题。假设有两个人尝试使用相同的电子邮件地址进行注册。现在,如果您自己执行唯一性检查,如下所示:

bool exists = userAlreadyExists(email);

if (exists)
   showWarning();
else
   insertUser(email);

可能会发生以下情况:

User 1 executes userAlreadyExists("foo@example.com") // returns false
User 2 executes userAlreadyExists("foo@example.com") // returns false

User 1 executes insertUser("foo@example.com")
User 2 executes insertUser("foo@example.com") // which is now a duplicate

如果让 MySQL 执行唯一性检查,则不会发生上述情况。

于 2013-08-01T14:44:41.400 回答
1

如果检查然后更新,则必须查询数据库两次。轮到它检查表索引两次。您有网络开销和数据库处理开销。

的观点是你必须保持乐观:如果有一些重复的值,更新并优雅地处理潜在的失败。


两步法还有一个缺点:不要忘记对数据库的并发访问。根据您的数据库设置(隔离级别、数据库引擎),DB 有可能SELECTUPDATE.

于 2013-08-01T14:43:04.663 回答