在执行传递电子邮件和密码的标准登录过程时,索引这两个字段是否有意义?
其他表中的这两个字段没有 FK。
是的。这说得通。如果身份验证系统基于电子邮件 + 密码,并且如果两列都在同一个表中,那么我将创建以下索引(SQL2005+):
CREATE UNIQUE INDEX IUN_MyTable_EmailAddress#Password
ON dbo.MyTable(EmailAddress)
INCLUDE (Password);
索引有双重用途:
首先:它将防止重复的用户=重复的电子邮件(或多或少:参见bogdan@gmail.com
vs. 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 开始,并定期检查是否有很多页面拆分。根据这些观察,我会或多或少地减少/增加这个填充因子。
这取决于您的查询。
WHERE
条款中是否有密码中的电子邮件?然后寻找一个包含两列的索引。很少有一种万能的解决方案。您确实需要分析您的代码并检查您的情况。索引在大多数情况下都很棒,但您必须记住,它们会占用一些额外的磁盘空间,并且更新它们会花费时间。