检查项目是否存在的最佳方法是:选择计数(ID)还是存在(...)?

时间:2010-07-17 12:25:04

标签: sql sql-server-2005 performance tsql

如果表格包含超过700,000行,则确定某个项目是否存在的性能最佳

if (Select count(id) from Registeration where email='email@w.cn') > 0
    print 'Exist'
else
    print 'Not Exist'

OR

if Exists(Select id from Registeration where email='email@w.cn') 
    print 'Exist'
else
    print 'Not Exist'

2 个答案:

答案 0 :(得分:28)

EXISTS,总是

  • COUNT将遍历表格或索引:您要求COUNT
  • EXISTS会在找到行后立即停止

编辑,要清楚

当然,在这种情况下,如果电子邮件列是唯一的并且已建立索引,则它将会关闭。

通常,EXISTS将使用更少的资源,也更正确。你正在寻找存在的行,而不是“大于零”,即使它们是相同的

Edit2:在EXISTS中,你可以使用NULL,1,ID,甚至是1/0:它没有被检查......

2011年5月21日编辑:

看起来这在SQL Server 2005+中进行了优化,因此在这种情况下COUNT现在与EXISTS相同

答案 1 :(得分:4)

还考虑到Count()只返回int,如果你计算一些超过int的数据会产生错误