独特的邮件查询方法

时间:2012-08-28 16:37:42

标签: mysql database scalability

解决方案<!/强> 我做了@pilcrow建议的。查找mysql_error_num:1062(唯一的电子邮件)并返回错误(如果是这样)。

说明

我正在构建一个应用程序,需要许多不同的用户,可能还有公司通过注册表单注册。我想确保个人输入的电子邮件是唯一的,因为公司可能会向许多用户发送通用的info@company.com电子邮件。

我希望能够检查数据库以查看是否存在电子邮件。

问题:

我已经知道如何通过JavascriptajaxPHP完成此操作,但我担心如果我有很多(数千)用户,那么查询将永远需要。特别是如果我决定在表单上使用keypress事件而不是blur事件。我可能错了,但我看不出一个简单的WHERE email = $email是非常可扩展的。

问题

有没有办法设置我的代码或数据库(mysql)来加速查询?我正在考虑为电子邮件设置一个单独的表,但不要认为这样可行。

谢谢!

p.s。我非常关注数据库/服务器技术,所以PHP + MYSQL就是这样。

2 个答案:

答案 0 :(得分:1)

您的问题对于您将在数据库中存储的内容相当模糊。单独的电子邮件表的缺点是什么?

您真正需要的不仅仅是表格,而是电子邮件的索引。基础表可以只是电子邮件,也可以有其他用户信息。但是,如果执行查询,例如:

 select email
 from t
 where email = <your email to check>
 limit 1

然后查询将有效地使用索引进行匹配。

答案 1 :(得分:1)

你问

  

有没有办法设置我的代码或数据库(mysql)来加速查询?

是的,完全省略查询。

对存储在后端数据库中的电子邮件地址设置UNIQUE约束,然后准备好在由于重复的电子邮件地址而导致新帐户的INSERTion失败时捕获ER_DUP_UNIQUE

该方法可防止重复,并在选择副本时警告新用户。

我非常怀疑您需要在输入时查找电子邮件地址(“......如果我决定使用keypress事件......”)。如果您确实想在INSERTing之前检查地址是否存在,那么您还需要一个事务来阻止TOCTOU欢闹。但是,由于UNIQUE约束是最简单但最有效的防御重复,所以只需实现它。