5

我正在使用 SQL Server 2008 R2

我只想测试表中是否存在某些东西

IF EXISTS (SELECT * FROM ta WHERE ca = 'abc') PRINT 'YES'
IF EXISTS (SELECT ca FROM ta WHERE ca = 'abc') PRINT 'YES'
IF EXISTS (SELECT 1 FROM ta WHERE ca = 'abc') PRINT 'YES'
IF EXISTS (SELECT (1) FROM ta WHERE ca = 'abc') PRINT 'YES'
IF EXISTS (SELECT TOP 1 1 FROM ta WHERE ca = 'abc') PRINT 'YES'

它们在结果/副作用/性能方面是否有任何差异(无论多么微小)?

谢谢

4

2 回答 2

6

绝对没有区别-IF EXISTS(...)只会根据WHERE语句中的子句检查行的存在。

SELECT *声明中的其他所有内容都无关紧要 - 无论您使用orSELECT 1或 or都没有任何区别SELECT TOP 1 *。即使 usingSELECT * ....不会选择表中的所有列 - 它再次只是根据WHERE子句检查数据是否存在。

所有五个查询都有完全相同的执行计划

于 2012-10-10T05:16:16.323 回答
3

没有区别,执行计划似乎是一样的。

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

于 2012-10-10T05:22:12.227 回答