2

在执行传递电子邮件和密码的标准登录过程时,索引这两个字段是否有意义?

其他表中的这两个字段没有 FK。

4

2 回答 2

2

是的。这说得通。如果身份验证系统基于电子邮件 + 密码,并且如果两列都在同一个表中,那么我将创建以下索引(SQL2005+):

CREATE UNIQUE INDEX IUN_MyTable_EmailAddress#Password
ON dbo.MyTable(EmailAddress)
INCLUDE (Password);

索引有双重用途:

首先:它将防止重复的用户=重复的电子邮件(或多或少:参见bogdan@gmail.comvs. bog.dan@gmail.com

第二:它有助于以下查询

SELECT ...
FROM dbo.MyTable t
WHERE t.EmailAddress = @pEmailAddress

或者

SELECT ...
FROM dbo.MyTable t
WHERE t.EmailAddress = @pEmailAddress
AND t.Password = @pPassword
-- 'p' prefix = parameter

注意:我会为此索引使用较低(小于 100)的填充因子。例如,我将从填充因子 90 开始,并定期检查是否有很多页面拆分。根据这些观察,我会或多或少地减少/增加这个填充因子。

于 2013-10-05T22:07:31.417 回答
1

这取决于您的查询。

  • 您的WHERE条款中是否有密码中的电子邮件?然后寻找一个包含两列的索引。
  • 您是否通过电子邮件搜索并找回密码。在电子邮件上创建索引并包含密码列。

很少有一种万能的解决方案。您确实需要分析您的代码并检查您的情况。索引在大多数情况下都很棒,但您必须记住,它们会占用一些额外的磁盘空间,并且更新它们会花费时间。

于 2013-10-05T21:53:41.853 回答