sql - IF Exists 不同写法之间的区别?

标签 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'

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

谢谢

最佳答案

绝对没有区别 - IF EXISTS(...)将只检查基于 WHERE 的行是否存在你的陈述中的条款。

声明中的其他所有内容都无关紧要 - 是否使用 SELECT * 没有任何区别或 SELECT 1或 或 SELECT TOP 1 * .即使使用 SELECT * .... 不是 从表中选择所有列 - 它再次仅根据 WHERE 检查数据是否存在条款。

所有五个查询都有 正好相同的执行计划

关于sql - IF Exists 不同写法之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12812288/

相关文章:

performance - 在 Linux 上本地对 Apache 进行基准测试的好方法是什么?

sql - 使用三重自联接执行缓慢的 SQL 查询

java - java中管道模式的实现

sql-server - 允许从特定计算机的通用帐户访问 Sql Server

sql - T-sql每天获取最小值和最大值

java - 尽管执行的 SQL 返回值,但 Hibernate 返回空值列表

sql-server - NVARCHAR 或 VARCHAR 变量定义的返回长度

c#-4.0 - 链接服务器 "OLE DB provider ' 的奇怪 '(null)' STREAM' 返回了列 '[!BulkInsert].Value' 错误的无效数据

sql - 如何将数据类型 CLOB 更改为 VARCHAR2(sql)

mysql - 根据另一个查询的结果为新 ID 插入重复行