【问题标题】:What's the best to check if item exist or not: Select Count(ID)OR Exist(...)?检查项目是否存在的最佳方法是:选择计数(ID)或存在(...)?
【发布时间】:2011-03-17 08:00:28
【问题描述】:

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

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

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

【问题讨论】:

    标签: sql sql-server-2005 performance tsql


    【解决方案1】:

    存在,永远存在

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

    编辑,要清楚

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

    一般来说,EXISTS 会使用更少的资源,也更正确。您正在寻找一行的存在,而不是“大于零”,即使它们相同

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

    2011 年 5 月 21 日编辑:

    看起来这是在 SQL Server 2005+ 中优化的,所以在这种情况下 COUNT 现在与 EXISTS 相同

    【讨论】:

    • +1。但是,在简化的示例中,如果 email 被编入索引,则差异应该很小以至于无法测量。
    【解决方案2】:

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

    【讨论】:

    • 是的,如果您有超过 20 亿行,那么您应该使用 count_big,或您的 RBMS 的等价物。
    猜你喜欢
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    相关资源
    最近更新 更多