在进行传递电子邮件和密码的标准LOGIN流程时,对这两个字段进行索引是否有意义?
其他表中的这两个字段没有FK。
答案 0 :(得分:1)
这取决于您的查询。
WHERE
条款中是否同时包含电子邮件密码?然后去找一个包含两列的索引。很少有一个通用的解决方案。您确实需要分析代码并检查您的情况。在大多数情况下,索引很棒,但您必须记住,它们需要额外的磁盘空间并更新它们需要花费时间。
答案 1 :(得分:1)
是。这说得通。如果验证系统基于电子邮件+密码,并且两列都在同一个表中,那么我将创建以下索引(SQL2005 +):
CREATE UNIQUE INDEX IUN_MyTable_EmailAddress#Password
ON dbo.MyTable(EmailAddress)
INCLUDE (Password);
索引有两次使用:
首先:它会阻止重复用户=重复的电子邮件(或多或少:请参阅bogdan@gmail.com
与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开始,并定期check to see if there are to many page splits。根据这些观察,我会减少/增加或多或少的填充因子。