不同写作方式存在差异?

时间:2012-10-10 05:06:26

标签: sql performance sql-server-2008-r2

我正在使用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'

他们在结果/副作用/表现上有任何差异(无论多小)?

谢谢

2 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:3)

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

enter image description here enter image description here enter image description here