首页 > 解决方案 > SQL Server 中的 IF Exists (Query) vs IF(ResultCount > 0) 哪个查询执行得更好

问题描述

检查数据是否存在的查询

    IF EXISTS (SELECT * 
    FROM Persons 
    WHERE PName = 'John')
    BEGIN 
        PRINT 'YES'
    END

返回结果计数然后比较的查询:-

    IF((SELECT Count(*) 
    FROM Persons 
    WHERE PName = 'John') > 0)
    BEGIN
        PRINT 'YES'
    END 

在 Persons 表中,PName 列是一个非聚集唯一索引

标签: sqlsql-serverdatabase

解决方案


使用if exists. 这可以在第一个匹配行(如果有)处停止。聚合查询需要执行实际计数。

我会注意到,如果你有一个索引persons(name),那么差异很小——在这种情况下。该索引可用于这两个查询。不过,我建议您使用exists,因为它可以更好地捕捉您的意图并且它应该具有更好的性能。


推荐阅读