【发布时间】:2011-11-11 18:20:47
【问题描述】:
如果我们在IF EXISTS 中有一个SELECT 语句,执行是否会在找到表中的记录后立即停止?例如:
IF EXISTS(SELECT * FROM table1 WHERE Name='John' )
return 1
else
return 0
如果表中存在名称 = John 的行,它是停止执行并返回 1,还是遍历整个表以寻找更多匹配项?
【问题讨论】:
-
仅供参考,您也可以考虑使用 SELECT 1 而不是 SELECT * 以便更好地利用索引(而不是从表中检索所有字段)。
-
@sfuqua This is a myth
-
IF EXISTS (SELECT 1 / 0 FROM table1 WHERE Name='John') ... 这不会出错... SQL 永远不会评估
SELECT... 它只是在查看WHERE. -
我使用“SELECT 1”有两个原因。第一,解析器实际上查询表元数据以扩展“*”,直到 SQL 2008,导致小的(可忽略的)性能命中。更重要的原因是直接在代码中交流,列列表没有意义。
-
@codekaizen - 解析器也为
SELECT 1执行此操作,如图所示,由于列权限here 显示“SELECT 1”失败。
标签: sql-server tsql exists