SQL 2012 - 索引用户表字段电子邮件和密码出于性能原因

时间:2013-10-05 21:43:11

标签: sql-server sql-server-2008

在进行传递电子邮件和密码的标准LOGIN流程时,对这两个字段进行索引是否有意义?

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

2 个答案:

答案 0 :(得分:1)

这取决于您的查询。

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

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

答案 1 :(得分:1)

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

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

索引有两次使用:

首先:它会阻止重复用户=重复的电子邮件(或多或少:请参阅bogdan@gmail.combog.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。根据这些观察,我会减少/增加或多或少的填充因子。