【问题标题】:Unique email lookup methodology独特的电子邮件查找方法
【发布时间】:2012-08-28 16:37:42
【问题描述】:

解决方案! 我按照@pilcrow 的建议做了。查找 mysql_error_num:1062 (唯一电子邮件),如果是则返回错误。

说明:

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

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

问题:

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

问题

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

谢谢!

p.s. 我非常了解数据库/服务器技术,所以PHP+MYSQL 是。

【问题讨论】:

  • 在 keydown 上设置超时以仅在用户 x 秒内没有输入任何内容时运行 ajax 请求。
  • 这是个好主意,但即使这样也可能会变慢

标签: mysql database scalability


【解决方案1】:

你问

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

是的,完全省略查询。

对存储在后端数据库中的电子邮件地址设置唯一约束,然后准备好在插入新帐户因电子邮件地址重复而失败时捕获ER_DUP_UNIQUE

这种方法可以防止重复并在选择重复时警告新用户。

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

【讨论】:

  • 这实际上是一个非常好的主意。问题是,我正在使用 CodeIgniter,可能无法选择特定问题。我会调查它并相应地更新问题,谢谢!!
【解决方案2】:

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

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

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

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

【讨论】:

  • 我并不是说有缺点,但我只是认为没有必要,实现仅电子邮件表有意义吗?至于indexing,您能否详细说明一下?我现在要谷歌它
  • @phil 。 . .索引是数据库用来使查询运行得更快的数据结构。在这种情况下,他们将大大加快查找重复电子邮件所需的时间。题目相当广泛。谷歌和维基百科有很多关于这个主题的信息,数据库文档也有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-06
  • 1970-01-01
  • 2020-07-28
  • 2017-12-16
  • 2015-11-13
  • 2018-02-18
  • 1970-01-01
相关资源
最近更新 更多