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

Amr*_*awy 16 sql t-sql performance sql-server-2005

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

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

要么

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

gbn*_*gbn 28

永远存在

  • COUNT将遍历表或索引:您要求COUNT
  • 一旦找到一行,EXISTS就会停止

编辑,要清楚

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

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

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

2011年5月21日编辑:

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

  • +1.但是,在简化的示例中,如果`email`被索引,差异应该是最小的,以至于无法测量. (2认同)