哪种查询在SQL Server中的IF存在(查询)效果优于IF(ResultCount> 0)效果更好

时间:2019-02-23 14:13:29

标签: sql sql-server database

检查数据是否存在的查询

    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 

在“人员”表中,“ PName”列是非聚集的唯一索引

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

存在更好。存在将在匹配的第一行停止,计数将查询所有匹配条件的行并进行比较