Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 检查大表中是否存在用户的最快方法是什么?(性能优化)_Sql_.net_Sql Server_Tsql_Indexing - Fatal编程技术网

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

Sql 检查大表中是否存在用户的最快方法是什么?(性能优化),sql,.net,sql-server,tsql,indexing,Sql,.net,Sql Server,Tsql,Indexing,我在一个有大约500000用户的网站上工作,我遇到的问题是,当一个用户去创建一个新帐户时,等待时间非常长,因为我使用这个查询检查是否存在一个用户 select count(userName) as userNameTotal from user_table where userName = 'hellokitty' 然后,我决定他们是否可以根据usernamecotal是否大于0来创建帐户 我本来打算为列编制索引,但我认为在尝试向表中添加用户时,这也会很慢,因为每次添加用户时都需要重新创建索引

我在一个有大约500000用户的网站上工作,我遇到的问题是,当一个用户去创建一个新帐户时,等待时间非常长,因为我使用这个查询检查是否存在一个用户

select count(userName) as userNameTotal from user_table where userName = 'hellokitty'
然后,我决定他们是否可以根据usernamecotal是否大于0来创建帐户

我本来打算为列编制索引,但我认为在尝试向表中添加用户时,这也会很慢,因为每次添加用户时都需要重新创建索引列表

是否有一种更快的方法来执行此操作以及是否应该对此列编制索引?

对于此查询:

select count(userName) as userNameTotal
from user_table
where userName = 'hellokitty'
您需要在
用户表(用户名)
上建立索引

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

if (exists (select 1 from  from user_table where userName = 'hellokitty'))
begin 
 . . .
end;
这应该比聚合版本快,因为它可以在第一个匹配行处停止。

对于此查询:

select count(userName) as userNameTotal
from user_table
where userName = 'hellokitty'
您需要在
用户表(用户名)
上建立索引

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

if (exists (select 1 from  from user_table where userName = 'hellokitty'))
begin 
 . . .
end;
这应该比聚合版本快,因为它可以在第一个匹配行处停止。

对于此查询:

select count(userName) as userNameTotal
from user_table
where userName = 'hellokitty'
您需要在
用户表(用户名)
上建立索引

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

if (exists (select 1 from  from user_table where userName = 'hellokitty'))
begin 
 . . .
end;
这应该比聚合版本快,因为它可以在第一个匹配行处停止。

对于此查询:

select count(userName) as userNameTotal
from user_table
where userName = 'hellokitty'
您需要在
用户表(用户名)
上建立索引

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

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


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

正确的索引对性能的影响最大。使用
exists
是除此之外的另一个好处。但是让我们说是的,它们存在,然后添加用户。我觉得这样会降低性能,因为每次添加用户时都需要重新创建用户名索引。我想我要说的是,当我添加一个用户时,重新创建索引并对性能产生影响,或者在没有索引的情况下进行检查以查看用户名是否存在,这样会比较慢吗?不需要重新创建索引;添加了一个新元素。索引通常更快,因为添加一个元素的开销要比在没有索引的情况下进行完整表扫描来读取表的成本少得多。好的,谢谢,这就是我想知道的。因此,在列索引中添加一个元素比进行全表扫描更有效。@LeslieJones仅进行一次扫描可能不会。在应用程序中,您可能要多次搜索用户名。正确的索引对性能的影响最大。使用
exists
是除此之外的另一个好处。但是让我们说是的,它们存在,然后添加用户。我觉得这样会降低性能,因为每次添加用户时都需要重新创建用户名索引。我想我要说的是,当我添加一个用户时,重新创建索引并对性能产生影响,或者在没有索引的情况下进行检查以查看用户名是否存在,这样会比较慢吗?不需要重新创建索引;添加了一个新元素。索引通常更快,因为添加一个元素的开销要比在没有索引的情况下进行完整表扫描来读取表的成本少得多。好的,谢谢,这就是我想知道的。因此,在列索引中添加一个元素比进行全表扫描更有效。@LeslieJones仅进行一次扫描可能不会。在应用程序中,您可能要多次搜索用户名。正确的索引对性能的影响最大。使用
exists
是除此之外的另一个好处。但是让我们说是的,它们存在,然后添加用户。我觉得这样会降低性能,因为每次添加用户时都需要重新创建用户名索引。我想我要说的是,当我添加一个用户时,重新创建索引并对性能产生影响,或者在没有索引的情况下进行检查以查看用户名是否存在,这样会比较慢吗?不需要重新创建索引;添加了一个新元素。索引通常更快,因为添加一个元素的开销要比在没有索引的情况下进行完整表扫描来读取表的成本少得多。好的,谢谢,这就是我想知道的。因此,在列索引中添加一个元素比进行全表扫描更有效。@LeslieJones仅进行一次扫描可能不会。在应用程序中,您可能要多次搜索用户名。正确的索引对性能的影响最大。使用
exists
是除此之外的另一个好处。但是让我们说是的,它们存在,然后添加用户。我觉得这样会降低性能,因为每次添加用户时都需要重新创建用户名索引。我想我要说的是,当我添加一个用户时,重新创建索引并对性能产生影响,或者在没有索引的情况下进行检查以查看用户名是否存在,这样会比较慢吗?不需要重新创建索引;添加了一个新元素。索引通常更快,因为添加一个元素的开销要比在没有索引的情况下进行完整表扫描来读取表的成本少得多。好的,谢谢,这就是我想知道的。因此,将一个元素添加到列索引中比进行全表扫描更有效。@LeslieJones仅进行一次扫描可能不会。在应用程序中,您可能要多次搜索用户名。