我正在一个拥有大约500,000名用户的网站上工作,问题是当用户去创建一个新帐户时,等待时间非常长,因为我检查用户是否存在使用此查询。
select count(userName) as userNameTotal from user_table where userName = 'hellokitty'
然后我决定他们是否可以根据userNameTotal是否大于0来创建帐户。
我打算对列进行索引,但我认为当我尝试将用户添加到表时,这也会很慢,因为每次添加用户时都需要重新创建索引列表。
是否有更快的方法来执行此操作并且是否应将此列编入索引?
答案 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;
这应该比聚合版本更快,因为它可以在第一个匹配的行停止。