检查用户是否存在于大型表中的最快方法是什么? (性能优化)

时间:2015-10-03 02:55:32

标签: sql .net sql-server tsql indexing

我正在一个拥有大约500,000名用户的网站上工作,问题是当用户去创建一个新帐户时,等待时间非常长,因为我检查用户是否存在使用此查询。

select count(userName) as userNameTotal from user_table where userName = 'hellokitty'

然后我决定他们是否可以根据userNameTotal是否大于0来创建帐户。

我打算对列进行索引,但我认为当我尝试将用户添加到表时,这也会很慢,因为每次添加用户时都需要重新创建索引列表。

是否有更快的方法来执行此操作并且是否应将此列编入索引?

1 个答案:

答案 0 :(得分:3)

对于此查询:

select count(userName) as userNameTotal
from user_table
where userName = 'hellokitty'

您需要user_table(userName)上的索引。

但是,这不是最有效的方法。您应该保留相同的索引并使用exists

if (exists (select 1 from  from user_table where userName = 'hellokitty'))
begin 
 . . .
end;

这应该比聚合版本更快,因为它可以在第一个匹配的行停止。